关闭

Handler msg用法

标签: Handler
1950人阅读 评论(1) 收藏 举报
分类:

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
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:14553次
    • 积分:354
    • 等级:
    • 排名:千里之外
    • 原创:20篇
    • 转载:9篇
    • 译文:0篇
    • 评论:5条
    文章分类
    最新评论