Android消息机制详解及实例代码-创新互联

Android 消息机制

创新互联专注于企业网络营销推广、网站重做改版、龙胜网站定制设计、自适应品牌网站建设、HTML5建站商城网站定制开发、集团公司官网建设、成都外贸网站制作、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为龙胜等各大城市提供网站开发制作服务。

1.概述

Android应用启动时,会默认有一个主线程(UI线程),在这个线程中会关联一个消息队列(MessageQueue),所有的操作都会被封装成消息队列然后交给主线程处理。为了保证主线程不会退出,会将消息队列的操作放在一个死循环中,程序就相当于一直执行死循环,每循环一次,从其内部的消息队列中取出一个消息,然后回调相应的消息处理函数(handlerMessage),执行完成一个消息后则继续循环,若消息队列为空,线程则会阻塞等待。因此不会退出。如下图所示:


Android 消息机制详解及实例代码

Handler 、 Looper 、Message有啥关系?


在子线程中完成耗时操作,很多情况下需要更新UI,最常用的就是通过Handler将一个消息Post到UI线程中,然后再在Handler的handlerMessage方法中进行处理。而每个Handler都会关联一个消息队列(MessageQueue),Looper负责的就是创建一个MessageQueue,而每个Looper又会关联一个线程(Looper通过ThreadLocal封装)。默认情况下,MessageQueue只有一个,即主线程的消息队列。


上面就是Android消息机制的基本原理,如果想了解更详细,我们从源码开始看。

2.源码解读

(1)ActivityThread主线程中启动启动消息循环Looper

public final class ActivityThread {
  public static void main(String[] args) {
    //代码省略
    //1.创建消息循环的Looper
    Looper.prepareMainLooper();

    ActivityThread thread = new ActivityThread();
    thread.attach(false);
    if (sMainThreadHandler == null) {
      sMainThreadHandler = thread.getHandler();
    }
    AsyncTask.init();

    //2.执行消息循环
    Looper.loop();
    throw new RuntimeException("Main thread loop unexpectedly exited");
  }
}


网站名称:Android消息机制详解及实例代码-创新互联
网页网址:http://azwzsj.com/article/dodhie.html