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

    };




版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Wifi密码破解与局域网抓包监听(小白--纯工具版)

工具介绍: 1,wifi密码破解:CDlinux.iso  :一个Linux系统,集成了wifi密码的PIN码破解软件。 2,Mac地址修改器:修改自己的MAC地址,防止被封 3,ettercap 4...

简易爬虫实现校园网剩余流量查询

学校公众号要用爬虫查询校园网流量,记录一下实现这个简易爬虫的过程。 开发工具: Eclipse,Chrome/Firefox 第三方库”: jsoup:用来解析网页数据,HttpClient用来连...

Android Handler使用注意

Android中对UI更新经常使用Handler。 Handler handler=new Handler(){ public void handleMessage(Messag...

ListView---一个神奇的控件源码解析

ListView—–一个神奇的控件让我们带着一个问题来开始我们的ListView之旅。 为什么ListView能够显示成千上万条数据都不会OOM,而且消耗内存还基本保持恒定?View控件,就是为了交...

Android消息机制Handler,MessageQueue,Looper源码解析

首先我们先给大家介绍下Handler与Looper与MessageQueue整体运作 Handler:用于处理Message,可以有多个实例 Message:用于线程之间传递信息,发送的信息放入M...

Rxjava初始

了解Rxjava使用当我们讲一个东西的时候必须是会使用,得从使用方面扯起 Observable.create(new Observable.OnSubscribe() { ...

msg.obj和msg.what

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

深入剖析Android消息机制

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

android 蓝牙通信(二)

实现功能:蓝牙配对在上篇的基础上,配对第一个找到的蓝牙设备 1、重写Handler中找到蓝牙设备后的逻辑/** 判断是否是第一个发现的蓝牙设备*/ private boolean hasFindOn...

Android蓝牙开发教程(二)——连接蓝牙设备

在上一篇中已经介绍如何搜索附近可连接的蓝牙设备,如果你还没阅读过,建议先看看上一篇文章Android蓝牙开发教程(一)——搜索蓝牙设备获取到设备后就可以开始处理蓝牙设备之间的连接。在上一篇教程中我们将...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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