ActivityThread / ApplicationThread

public final class ActivityThread {

 

 

https://www.devp.com/forum.php?mod=viewthread&tid=38129

 

主线程中会构造这两个类的对象。
但是他们不是线程,你看看继承关系就可以知道ApplicationThread是binder, ActivityThread是一个final类也不是真正的线程。
如果你用ddms查看某一个进程的所有线程,你会发现它只有一个main thread,当然它可能还有binder thread, jdwp, signal catcher等。

 

一个应用程序对应一个ActivityThread实例,应用程序由activityThread打开消息循环, 同时,一个应用程序也对应一个ApplicationThread对象,此对象是ActivityThread 与 ActivityManagerService连接的桥梁

应该不是一个应用程序对应一个ActivityThread实例,而是一个进程对应一个ActivityThread实例,这个进程里面所有的activity对应这一个ActivityThread实例,你可以看看ActivityThread类包含了mActivities。

 

 

 

Step 3. Activity.startActivityForResult

这个函数也是实现在frameworks/base/core/java/android/app/Activity.java文件中:

[java]   
  1. public class Activity extends ContextThemeWrapper implements LayoutInflater.Factory,
  2. Window.Callback, KeyEvent.Callback, OnCreateContextMenuListener, ComponentCallbacks {
  3. ......
  4. public void startActivityForResult(Intent intent, int requestCode) {
  5. if (mParent == null) { Instrumentation.ActivityResult ar =
  6. mInstrumentation.execStartActivity( this, mMainThread.getApplicationThread(), mToken, this,
  7. intent, requestCode); ......
  8. } else { ......
  9. }
  10. ......
  11. } 这里的mInstrumentation是Activity类的成员变量,它的类型是Intrumentation,定义在frameworks/base/core/java/android/app/Instrumentation.java文件中,它用来监控应用程序和系统的交互。

    这里的mMainThread也是Activity类的成员变量,它的类型是ActivityThread,它代表的是应用程序的主线程,我们在Android系统在新进程中启动自定义服务过程(startService)的原理分析一文中已经介绍过了。这里通过mMainThread.getApplicationThread获得它里面的ApplicationThread成员变量,它是一个Binder对象,后面我们会看到,ActivityManagerService会使用它来和ActivityThread来进行进程间通信。这里我们需注意的是,这里的mMainThread代表的是Launcher应用程序运行的进程。

    这里的mToken也是Activity类的成员变量,它是一个Binder对象的远程接口。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值