转载原文地址:http://blog.csdn.net/yalinfendou/article/details/46909173【yalinfendou的博客】
需要了解的几点概念和知识点:
- Instrumentation是执行application instrumentation代码的基类,这个类在任何application code之前实例化,让你可以监听所有的system与application之间的交互,一个应用程序中只有一个Instrumentation对象,每个Activity内部都有一个该对象的引用Instrumentation可以帮助管理Activity生命周期的回调,通过追踪源码会发现,Instrumentation的callActivityOnPause最终会去调用activity的performPause(),
- ActivityResult是Instrumentation的一个内部类,是Activity返回的一个结果,包含了resultCode和resultData
- ActivityThread类: 该类为应用程序的主线程类,所有的APK程序都有且仅有一个ActivityThread类 ,程序的入口为该类中的static main()函数
- IApplicationThread是一个接口
- ApplicationThreadNative是一个抽象类,实现了IApplicationThread接口,并继承Binder,具有Binder通信能力,public abstract class ApplicationThreadNative extends Binder implements IApplicationThread
- ApplicationThread 继承了ApplicationThreadNative,是ActivityThread 的一个内部类
- H也是ActivityThread的一个内部类,继承Handler,处理Activty,Service等生命周期的回调消息
- ActivityStackSupervisor 类是用来辅助管理ActivityStack的,里面有mHomeStack,mFocusedStack 和 mLastFocusedStack,它们的类型都是ActivityStack ,ActivityStackSupervisor 中主要是对它们的调度算法的一些操作
- 盗用一张图,出自http://blog.csdn.net/caowenbin/article/details/6036726
- 关于上图的说明:
- Binder是一种架构,这种架构提供了服务端接口、Binder驱动、客户端接口三个模块,用于完成进程间通信(IPC)
- IActivityManager是一个接口
- ActivityManagerNative 继承了 Binder 和实现了IActivityManager接口 ,具有Binder通信能力
- ActivityManagerService 继承了 ActivityManagerNative,是最核心的服务之一,负责管理Activity
- ActivityManagerProxy是ActivityManagerNative的一个内部类,也实现了IActivityManager接口
- 在开发过程中,程序员能接触到的也就是ActivityManager,系统不希望用户直接访问ActivityManagerService,而是经过ActivityManager类去访问,比如说通过activityManager.getRecentTasks得到最近使用的程序,在前面的博客《一个叫GUN的有趣的APP》使用过这个方法
- 但是ActivityManagerService和ActivityManager运行在不同的进程中,它们到底是如何通信的?这就是Proxy代理模式:为其他对象提供一种代理以控制这个对象的访问。
- activityManager.getRecentTasks动作真正的执行者是ActivityManagerService.getRecentTasks,关于这点,下面会有具体的代码分析