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、Looper、Message源码 详细版解析 ------从入门到升天

简介首先复习一下大多数人都知道的一个流程:最外框是一个主线程,它在运行的时候,内部已初始化一个轮循器Looper,而Looper类中有消息队列MessageQueue,接着会调用loop()方法不断去...

《Android开发艺术探索》读书笔记——Handler消息机制(ThreadLocal)

ThreadLocal是一个线程内部的数据存储类。它可以为各线程存储数据,同时只能由当前线程获取到存储的数据,对于其他线程来说则获取不到。它可以在不同线程中维护一套数据的副本,并且彼此互不干扰。...

Android源码分析之Handler消息机制

1 前言 Handler在Android开发中使用的比较多,通常Handler是在主线程中创建,子线程拿到这个Handler向主线程中发送消息。 那么如果需要主线程中向子线程中发送消息呢? ...

android中的消息机制 了解Handler

在分析Android消息机制之前,我们先来看一段代码: public class MainActivity extends Activity implements View.OnClickListe...

android消息机制 - Handler、Looper原理解析

android的消息机制就是指Handler、MessageQueue和Looper的工作过程。需要传递消息时,由Handler会调用MessageQueue的enqueueMessage方法将消息放...

Android--Handler使用应运及消息机制处理原理分析

Behind the fear of an ideal you, you create the fear, you can beat him

Android中AsyncTask(异步任务)和Handler(线程消息机制)的详解

AsyncTask生来就是处理一些后台的比较耗时的任务,给用户带来良好用户体验的,从编程的语法上显得优雅了许多,不再需要子线程和Handler就可以完成异步操作并且刷新用户界面。Android官网总结...

Android中handler消息机制中的一些细节问题

本文的编写是以博主前三篇博客为基础的,如果对handler详细机制有不理解的同学可以去参考下我的前三篇博客。   1.在handler中,为什么能实现消息的延迟发送?    是因为在enqueueMe...

Android消息机制之 Looper、Handler、Message的关系和运行

在网上看了好多介绍这铁三角的文章,有所感悟,但是要想真正消化,还是要自己动手记录一下。首先推荐一篇文章: http://www.cnblogs.com/codingmyworld/archive/20...

Android之Handler消息机制

android中Handle类的主要作用:   1.在新启动的线程中发送给消息   2.在主线程获取、处理消息 为什么要用Handle这样的一个机制:   因为在Android系统中UI操作并不是...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android之Handler消息机制
举报原因:
原因补充:

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