Handler msg用法

原创 2016年08月30日 13:32:36

1,msg 依赖的包

import android.content.Context;

import android.os.Handler;
import android.os.HandlerThread;

import android.os.Message;

2,Handler的对象获取

 private
    Handler mHandlerMsg = null;   

mHandlerMsg = new Handler(mcontext.getMainLooper()) {
        @Override public void handleMessage(Message msg) {
        super.handleMessage(msg);
    switch (msg.what) {
    case MSG_EPG_SECTION_FOUND:
        break;
    default:
        break;
    }
    }
};

其中 参数mcontext.getMainLooper()在当前activity下是不需要的;

3,消息的发送

消息的发送有三种方式,一种是没有参数直接发送;方法如下:

mHandlerMsg.sendEmptyMessage(MSG_EPG_SECTION_FOUND);

第二种是带参数发送,方法如下:

{

    Message msgtime = new Message();
    msgtime.what = MSG_EPG_TIME_UPDATE;
    msgtime.arg1 = msg.arg1;
    msgtime.arg2 = msg.arg1;
    msgtime.obj = msg.obj;
    mHandlerMsg.sendMessage(msgtime);

}

第三种方法是内部构建对象的方式,参数默认为msg.obj,obtainmessage()是从消息池中拿来一个msg 不需要另开辟空间new这种方法Message msg 对象可以复用。如果没有就会创建一个Message msg,有的话就用已创建好的。

(1)单个obj

{

mHandlerMsg.obtainMessage(MSG_EPG_SECTION_FOUND, mChannelUri).sendToTarget();

}

对应的消息处理如下:

{

  Uri muri = (Uri)msg.obj);

}

(2)嵌套多个obj

{

                 SomeArgs args = SomeArgs.obtain();
                args.arg1 = channel;
                args.arg2 = cb;
                args.arg3 = inputId;
                mHandlerMsg.obtainMessage(MSG_EPG_SECTION_FOUND, args).sendToTarget();

}

对应的消息处理如下:

{

                  SomeArgs args = (SomeArgs) msg.obj;
                    InputChannel channel = (InputChannel) args.arg1;
                    ITvInputSessionCallback cb = (ITvInputSessionCallback) args.arg2;
                    String inputId = (String) args.arg3;

}

(3)直接内部产生obj

{

 mHandlerMsg.obtainMessage(MSG_EPG_TIME_UPDATE, (int)(volume * 100), 0, null).sendToTarget();

}

相当于

{

    Message msgtime = new Message();
    msgtime.what = MSG_EPG_TIME_UPDATE;
    msgtime.arg1 = (volume * 100);
    msgtime.arg2 = 0;
    msgtime.obj = null;
    mHandlerMsg.sendMessage(msgtime);

}

4,延迟发送消息的方法

mHandlerMsg。sendMessageDelayed(msg1, 1000);

单位为ms;

5,清楚队列消息

mHandlerMsg.removeMessages(MSG_EPG_TIME_UPDATE);

6,线程实现handler msg的方法

  final HandlerThread mHandlerThread = new HandlerThread("LooperThread");
    mHandlerThread.start();
    final Handler mHandler = new Handler(mHandlerThread.getLooper()){

        @Override
        public void handleMessage(Message msg) {
            // TODO Auto-generated method stub
            super.handleMessage(msg);
            Log.w("LooperThread", "handleMessage::Thread id---" + mHandlerThread.getId());
        }

    };




msg.obj和msg.what

msg.ob使用来放对象的,这个对象可以使任何类型msg.what只能放数字(作用可以使用来做if判断)用过Handler的人都知道,Message有两种获取方法Message msg = new M...
  • qq_27029491
  • qq_27029491
  • 2015年05月07日 22:45
  • 4349

深入剖析Android消息机制

在Android中,线程内部或者线程之间进行信息交互时经常会使用消息,这些基础的东西如果我们熟悉其内部的原理,将会使我们容易、更好地架构系统,避免一些低级的错误。...
  • coolszy
  • coolszy
  • 2011年04月25日 08:37
  • 20578

Android Handler Message总结

当应用程序启动时,会开启一个主线程(也就是UI线程),由她来管理UI,监听用户点击,来响应用户并分发事件等。所以一般在主线程中不要执行比较耗时的操作,如联网下载数据等,否则出现ANR错误。所以就将这些...
  • Caesardadi
  • Caesardadi
  • 2013年01月24日 09:14
  • 96796

Handler 的sendEmptyMessage(int what)和sendMessage(Message msg)的区别?

Handler用sendEmptyMessage(int what)发消息,其实也可以用sendMessage(Message msg)的,但两者到底有啥区别? 直接上Handler源码: /**...
  • jcl490195138
  • jcl490195138
  • 2016年03月20日 12:27
  • 884

Message的几种简单用法

arg1和arg2是成本较低的替代品使用 setData(),如果你只需要存储一些整数值。 obj是任意对象发送给收件人。 what是用户定义的消息代码,以便收件人能识别这条消息是关于什么的。...
  • dimudan2015
  • dimudan2015
  • 2017年03月18日 09:50
  • 422

【Android 开发】: Android 消息处理机制之一: Handler 与 Message

最近几讲内容,我们学习了Android中关于多线程的一些知识,上一讲我们讲解了异步任务 AsyncTask 的操作,Android中还提供了其他的线程操作,如Handler Message Messa...
  • xukunhui2
  • xukunhui2
  • 2013年11月28日 21:31
  • 39261

理解Objective-C中的消息发送

首先来看看怎么理解发送消息的含义:曾经觉得Objc特别方便上手,面对着 Cocoa 中大量 API,只知道简单的查文档和调用。还记得初学 Objective-C 时把[receiver message...
  • hanangellove
  • hanangellove
  • 2015年04月12日 20:36
  • 3069

android中handler中 obtainmessge与New message区别

obtainmessage()是从消息池中拿来一个msg 不需要另开辟空间new new需要重新申请,效率低,obtianmessage可以循环利用; //use Handler.obtainMe...
  • imdxt1986
  • imdxt1986
  • 2011年12月05日 11:42
  • 11363

Android 利用handler传递数据

if (result != null) { Message msg = handler.obtainMessage(); msg.what = Constant.GETWEAT...
  • a511341250
  • a511341250
  • 2014年09月17日 13:36
  • 4725

Android开发之Handler(五)几种常见的传值方式

前面介绍handler的时候,也用到过几种传值方式,今天来总结一下,并且重点说一下bundle方式,代码如下: package com.handlerThread; import android....
  • thinkpadshi
  • thinkpadshi
  • 2012年11月18日 11:17
  • 22464
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Handler msg用法
举报原因:
原因补充:

(最多只允许输入30个字)