Android之Handler消息机制

转载 2016年08月31日 08:29:14

Android中handler类的主要作用

1、与其他线程协同作用

2、接收其他线程的消息并通过接收到的消息更新主UI线程的内容

 解决的问题:

负责主线程与子线程之间进行通讯,从而让子线程与主线程之间建立起协作的桥梁,使Android的UI更新的问题得到完美解决

Handler与子线程协作实例

1、创建Handler实现类,在主UI所在类中的内部类

class MyHandler extends Handler {    

      public MyHandler() { }    

      public MyHandler(Looper L) {    

               super(L);    

      }    

      // 重写handleMessage方法,接受数据并更新UI   

      @Override    

       public void handleMessage(Message msg) {    

                   super.handleMessage(msg);    

                   //此处根据msg内容进行UI操作   

           }    

 }  

2、子线程的实现

class MyThread implements Runnable {    

   public void run() {    

        Message msg = new Message();    

        Bundle b = new Bundle();   

         b.putString("cmd", "update");    

         msg.setData(b);    

        MainActivity.this.myHandler.sendMessage(msg);

        //通知Handler更新UI   

     }    

 }  

通过以上的两个实现,我们只需要在MainActivity中声明MyHandler实例对象就可以完成线程之间的通讯和界面的更新操作。

MyHandler myHandler = newMyHandler();

Android提供了Handler和Looper来满足线程间的通信。Handler先进先出原则。Looper类用来管理特定线程内对象之间的消息交换。

1)Looper:一个线程可以产生一个Looper对象,由它来管理此线程里的MessageQueue(消息队列)

1、Handler创建消息

     每一个消息都需要被指定的Handler处理,通过Handler创建消息便可以完成此功能。Android消息机制引入了消息池机制。Handler创建消息时首先看一下消息池是否有消息,如果有,就直接从消息池拿出消息,如果没有,就重新初始化一个消息实例。使用消息池的好处就是:消息不被使用的时候,并不作为垃圾回收,而是放入消息池,可供下次handler创建消息时使用,消息池提高了消息对象的复用,减少系统垃圾回收的次数。



2.handler发送消息

  UI主线程初始化第一个Handler时会通过ThreadLocal创建一个Looper,该Looper与UI主线程一一对应。使用ThreadLocal的目的是保证每一个线程创建唯一一个Looper。之后其他Handler初始化的时候直接获取第一个handler创建的Looper。Looper初始化的时候会创建一个消息队列MessageQueue。至此,主线程、消息循环、消息队列之间的关系是1:1:1。



3、Handler处理消息

     UI主线程通过Looper循环查询消息队列UI_MQ,当发现有消息存在时会将消息队列中取出。首先分析消息,通过消息的参数判断该消息对应的Handler,然后将消息分发到指定的Handler进行处理。

子线程通过Handler、Looper与UI主线程通信的流程如图所示。







Android Handler正确使用姿势

Android Handler正确使用姿势
  • geanwen
  • geanwen
  • 2017年01月08日 15:14
  • 1102

Android之Handler简单用法

今天給大家带来的是Androidzh
  • Joker_Ya
  • Joker_Ya
  • 2014年10月22日 20:09
  • 6208

Android学习笔记:关于Handler的详解(二)

4.handler移除消息 5.handler移除消息的内容 6.handler消息通信机制的原理 7.如何实现一个与子线程相关的handler 8. Android中更新ui的几种方式。...
  • u012156341
  • u012156341
  • 2016年02月29日 09:49
  • 565

Android中为什么要用到Handler

一、Handler的定义:           主要接受子线程发送的数据, 并用此数据配合主线程更新UI.           解释: 当应用程序启动时,Android首先会开启一个主线程 (...
  • u010313216
  • u010313216
  • 2015年01月19日 11:49
  • 1190

Android中handler的用法实例

Android中handler的用法实例 Handler主要用于不同线程之间的通信,尤其是普通线程通过handler机制发送message给主线程(UI线程)来更新UI,或者是把耗时的操作发送给ser...
  • zero9988
  • zero9988
  • 2015年12月04日 20:07
  • 1697

EventBus事件总线——优雅地替换Handler

转载自:http://bbs.itcast.cn/thread-83609-1-1.html 传智播客 什么是EventBus EventBus是Android下高效的发布/订阅事件总线机制。作用...
  • stimgo
  • stimgo
  • 2016年09月27日 20:29
  • 901

Android Handler 异步消息处理机制的妙用 创建强大的图片加载类

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38476887 ,本文出自【张鸿洋的博客】上一篇博客介绍了Android异步消息处...
  • lmj623565791
  • lmj623565791
  • 2014年08月11日 00:47
  • 59660

android-封装一个加载处理的handler类

public class LoadHandler extends Handler { private LoadListener listener; public LoadHandler(...
  • joshua_love
  • joshua_love
  • 2017年04月18日 10:19
  • 438

Android消息传递之Handler的简单用法

Handler 机制主要用来解决Android应用的多线程问题——Android 不允许Activity新启动的线程访问Activity中的组件,这样就导致新启动的线程无法动态改变界面中组件的属性值。...
  • qq_27561483
  • qq_27561483
  • 2016年10月24日 11:23
  • 669

Android入门开发之 Handler使用

Android提供了一个异步的消息回调机制Handler,  它负责发送消息和处理线程消息队列中的消息及runnable对象     Handler实例都是与一个线程和该线程的消息队列一起使用,一旦...
  • newjerryj
  • newjerryj
  • 2013年04月16日 00:31
  • 9874
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android之Handler消息机制
举报原因:
原因补充:

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