Handler msg用法

14 篇文章 0 订阅

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());
        }

    };




  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值