Activity的底层生命周期的回调

转载原文地址:http://blog.csdn.net/yalinfendou/article/details/46909173yalinfendou的博客

需要了解的几点概念和知识点:

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

猜你喜欢

转载自blog.csdn.net/zhangcanyan/article/details/80439783