ActivityManagerService知识点

  • 职责:
    • 四大组件管理(activity,service,content provider,boardcast recever)
    • 主要工作就是管理,记录,查询。
    • 四大组件进程通信的server端 四大组件属于client
    • 属于系统进程的一部分
  • ActivityStack.java:其实是个管理类,管理activity的各种状态
  • ActivityRecord.java:ActivityStack的管理对象,每个Activity在AMS对应一个ActivityRecord,来记录Activity的状态以及其他的管理信息。其实就是服务器端的Activity对象的映像
  • ActivityThread.java:主线程
    • main方法
      • 应用进程绑定 thread.attach(false)
      • 主线程消息处理loop创建 Looper.prepareMainLooper()和Looper.loop()
  • H.java:Handler子类
  • Instrumentation.java:这个东西我把它理解为ActivityThread的一个工具类,也算是一个劳动者吧,对于生命周期的所有操作例如onCreate最终都是直接由它来执行的。对于hook和测试会用到这个类
  • ApplicationThread.java:用来实现ActivityManagerService与ActivityThread之间的交互。在ActivityManagerService需要管理相关Application中的Activity的生命周期时,通过ApplicationThread的代理对象与ActivityThread通讯
  • Activity启动流程(http://gityuan.com/2016/03/12/start-activity/)
    ActivityManagerService知识点_第1张图片
    pic
  • 启动流程:
    • 点击桌面App图标,Launcher进程采用Binder IPC向system_server进程发起startActivity请求;
    • system_server进程接收到请求后,向zygote进程发送创建进程的请求;
    • Zygote进程fork出新的子进程,即App进程;
    • App进程,通过Binder IPC向sytem_server进程发起attachApplication请求;
    • system_server进程在收到请求后,进行一系列准备工作后,再通过binder IPC向App进程发送scheduleLaunchActivity请求;
    • App进程的binder线程(ApplicationThread)在收到请求后,通过handler向主线程发送LAUNCH_ACTIVITY消息;
    • 主线程在收到Message后,通过发射机制创建目标Activity,并回调Activity.onCreate()等方法。

你可能感兴趣的:(ActivityManagerService知识点)