应用程序的主线程准备就好消息队列并且进入到消息循环后,其它地方就可以往这个消息队列中发送消息了。

我们继续以文章开始介绍的Android应用程序启动过程源代码分析一文中的应用程序启动过为例,说明应用程序是如何把消息加入到应用程序的消息队列中去的。
在Android应用程序启动过程源代码分析这篇文章的Step 30中,ActivityManagerService通过调用ApplicationThread类的scheduleLaunchActivity函 数通知应用程序。
它可以加载应用程序的默认Activity了,这个函数定义在frameworks/base/core/java/android /app/ActivityThread.java文件中:
- [java] view plaincopypublic final class ActivityThread {
 - ......
 - private final class ApplicationThread extends ApplicationThreadNative {
 - ......
 - // we use token to identify this activity without having to send the
 - // activity itself back to the activity manager. (matters more with
 - ipc)
 - public final void scheduleLaunchActivity(Intent intent, IBinder token, int
 - ident,
 - ActivityInfo info, Bundle state, List pendingResults,
 - List pendingNewIntents, boolean notResumed, boolean isForward)
 - {
 - ActivityClientRecord r = new ActivityClientRecord();
 - r.token = token;
 - r.ident = ident;
 - r.intent = intent;
 - r.activityInfo = info;
 - r.state = state;
 - r.pendingResults = pendingResults;
 - r.pendingIntents = pendingNewIntents;
 - r.startsNotResumed = notResumed;
 - r.isForward = isForward;
 - queueOrSendMessage(H.LAUNCH_ACTIVITY, r);
 - }
 - ......
 - }
 - ......
 - }
 
这里把相关的参数都封装成一个ActivityClientRecord对象r,然后调用queueOrSendMessage函数来往应用程序的消息队 列中加入一个新的消息(H.LAUNCH_ACTIVITY),这个函数定义在frameworks/base/core/java/android /app/ActivityThread.java文件中:
- [java] view plaincopypublic final class ActivityThread {
 - ......
 - private final class ApplicationThread extends ApplicationThreadNative {
 - ......
 - // if the thread hasn't started yet, we don't have the handler, so just
 - // save the messages until we're ready.
 - private final void queueOrSendMessage(int what, Object obj) {
 - queueOrSendMessage(what, obj, 0, 0);
 - }
 - ......
 - private final void queueOrSendMessage(int what, Object obj, int arg1, int
 - g2) {
 - synchronized (this) {
 - ......
 - Message msg = Message.obtain();
 - msg.what = what;
 - msg.obj = obj;
 - msg.arg1 = arg1;
 - msg.arg2 = arg2;
 - mH.sendMessage(msg);
 - }
 - }
 - ......
 - }
 - ......
 - }
 
                网站标题:Android应用程序消息处理机制(Looper、Handler)分析(10)
                
                本文URL:http://www.csdahua.cn/qtweb/news5/341655.html
            
网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网