预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共29页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

Android应用程序是通过消息来驱动的,系统为每一个应用程序维护一个消息队例,应用程序的主线程不断地从这个消息队例中获取消息(Looper),然后对这些消息进行处理(Handler),这样就实现了通过消息来驱动应用程序的执行,本文将详细分析Android应用程序的消息处理机制。 前面我们学习Android应用程序中的Activity启动(HYPERLINK"http://blog.csdn.net/luoshengyang/article/details/6689748"Android应用程序启动过程源代码分析和HYPERLINK"http://blog.csdn.net/luoshengyang/article/details/6703247"Android应用程序内部启动Activity过程(startActivity)的源代码分析)、Service启动(HYPERLINK"http://blog.csdn.net/luoshengyang/article/details/6677029"Android系统在新进程中启动自定义服务过程(startService)的原理分析和HYPERLINK"http://blog.csdn.net/luoshengyang/article/details/6745181"Android应用程序绑定服务(bindService)的过程源代码分析)以及广播发送(HYPERLINK"http://blog.csdn.net/luoshengyang/article/details/6744448"Android应用程序发送广播(sendBroadcast)的过程分析)时,它们都有一个共同的特点,当ActivityManagerService需要与应用程序进行并互时,如加载Activity和Service、处理广播待,会通过HYPERLINK"http://blog.csdn.net/luoshengyang/article/details/6618363"Binder进程间通信机制来知会应用程序,应用程序接收到这个请求时,它不是马上就处理这个请求,而是将这个请求封装成一个消息,然后把这个消息放在应用程序的消息队列中去,然后再通过消息循环来处理这个消息。这样做的好处就是消息的发送方只要把消息发送到应用程序的消息队列中去就行了,它可以马上返回去处理别的事情,而不需要等待消息的接收方去处理完这个消息才返回,这样就可以提高系统的并发性。实质上,这就是一种异步处理机制。 这样说可能还是比较笼统,我们以HYPERLINK"http://blog.csdn.net/luoshengyang/article/details/6689748"Android应用程序启动过程源代码分析一文中所介绍的应用程序启动过程的一个片断来具体看看是如何这种消息处理机制的。在这篇文章中,要启动的应用程序称为Activity,它的默认Activity是MainActivity,它是由HYPERLINK"http://blog.csdn.net/luoshengyang/article/details/6767736"Launcher来负责启动的,而Launcher又是通过ActivityManagerService来启动的,当ActivityManagerService为这个即将要启的应用程序准备好新的进程后,便通过一个HYPERLINK"http://blog.csdn.net/luoshengyang/article/details/6618363"Binder进程间通信过程来通知这个新的进程来加载MainActivity,如下图所示: 它对应Android应用程序启动过程中的Step30到Step35,有兴趣的读者可以回过头去参考HYPERLINK"http://blog.csdn.net/luoshengyang/article/details/6689748"Android应用程序启动过程源代码分析一文。这里的Step30中的scheduleLaunchActivity是ActivityManagerService通过HYPERLINK"http://blog.csdn.net/luoshengyang/article/details/6618363"Binder进程间通信机制发送过来的请求,它请求应用程序中的ActivityThread执行Step34中的performLaunchActivity操作,即启动MainActivity的操作。这里我们就可以看到,Step30的这个请求并没有等待Step34这个操作完成就返回了,它只是把这个请求封装成一个