Android应用程序消息处理机制分析.doc

Android应用程序消息处理机制分析.doc

ID:56277153

大小:176.00 KB

页数:27页

时间:2020-06-05

Android应用程序消息处理机制分析.doc_第1页
Android应用程序消息处理机制分析.doc_第2页
Android应用程序消息处理机制分析.doc_第3页
Android应用程序消息处理机制分析.doc_第4页
Android应用程序消息处理机制分析.doc_第5页
资源描述:

《Android应用程序消息处理机制分析.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Android应用程序消息处理机制分析Android像Windows、MiniGui等大多数系统一样都是通过消息来驱动的,特殊的是Android为每一个应用程序维护一个消息队列和消息循环,应用程序的主线程不断地从这个消息队列中获取消息,然后对这些消息进行处理,这样就实现了通过消息来驱动执行应用程序。Android应用程序都是由Activity组成的,在我们点击主界面的应用程序图标后,Launch程序一般情况下会通知ActivityManagerService向zygote发出请求,为应用程序创建一个新的进程并启动一个默认的Activity。而应用程序的

2、进程入口是ActivityThread.main,我们可以理解为应用程序框架层为应用程序创建进程后,就把ActivityThread类加载进来,然后执行它的main函数。本文就以ActivityManagerService通知应用程序加载MainActivity为例,分析Android应用程序的消息处理机制(Looper、Handler)。这个过程,Launch通过ActivityManagerService给ActivityThread发送请求,请求启动MainActivity,这里ActivityManagerService只是把请求封装成一个消息

3、,然后通过quequeOrSendMessage把消息放到应用程序的消息队列中,并没有等待请求操作完成就返回了。应用程序发现消息队列有消息时,通过handleMessage处理这个消息,即调用handleLaunchActivity来执行实际的加载MainAcitivy类的操作。了解Android应用程序的消息处理过程后,就开始分析它的实现原理吧。与Windows应用程序的消息处理过程一样,Android应用程序的消息处理机制也是由消息循环、消息发送和消息处理这三个部分组成的。重要的概念(类)首先大概了解几个重要的概念(类):Message:消息,可以

4、理解为线程间通信的数据单元。MessageQueue:消息队列,用来存储一些待分发的Message,内部实现了一个Message链表结构,一般按照先进先出原则执行(当然也有优先级或是时间排序等)。Handler:是Message的主要处理者,负责将message添加到消息队列中以及对消息队列的Message进行处理(即分发消息)。Looper:循环器,帮助一个线程维护一个消息队列,循环取出MessageQueue中的Message,并交给相应的Handler处理。线程:UIthread通常就是mainthread,而Android启动程序时会替它建立一

5、个MessageQueue。每一个线程里可以含有一个Looper对象以及一个MessageQueue数据结构。在应用程序里,可以定义Handler的子类来接收Looper所发送的消息。下面我们开始分析应用程序消息处理机制的三个过程:1.消息循环在消息处理机制中,消息都是存放在一个消息队列中的,而应用程序主线程就会围绕着这个消息队列进入一个无线循环(Looper),直到程序退出。如果队列中有消息,应用程序主线程就会把它取出来,并分发给相应的Handler处理;如果队列中没有消息,应用程序主线程就会进入空闲等待状态,等待着下一个消息的到来。1.1Loope

6、r的创建(Java层)我们先来看一下Android应用程序主线程是怎样进入消息循环的,前面讨论过在应用程序启动时,会在进程中加载ActivityThread类,并执行这个类的main函数,而应用程序的消息循环就是在这个main中实现的,它定义在frameworks/base/core/java/android/app/ActivityThread.java文件中:1.public final class ActivityThread {  2.    ......  3.finalHmH=newH();4. ......  1.    public s

7、tatic void main(String[] args) {  2.        ......  3.        Looper.prepareMainLooper();  4.        ......  5.        ActivityThread thread = new ActivityThread();  6.        thread.attach(false);  7.        ......  8.        Looper.loop();  9.        ......  10.    }  11.}  这个

8、函数做了两件事情,一是在主线程中创建了一个ActivityThread实例,在创建这个实例时,

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。