AMS

  • 桌面Launcher进程为应用生成桌面图标入口,通过Binder与AMS通信,开启应用进程时:

    • 分别调用Launcher、Activity、Instrumentation(管理系统与应用交互,每个进程存在一个instrumentation对象,用于创建application、activity、service及其生命周期管理)、ActivityManagerNative、activityManagerProxy(AMS的本地代理)的相关startActivity函数
    • AMS进行完与Launcher的交互后,通过zygote创建新进程启动ActivityThread实例
    • 调用activityThread程序入口main函数
  • activityThread中程序入口psvm(app真正入口)工作:

    • looper初始化

    • activityThread初始化

      • applicationThread初始化

        应用提供的与AMS等服务通讯等Binder接口

      • H类(Handler)初始化

      • 创建application中所有activity、service、application的map集合mActivities

    • applicationThread与ams相关联 activityThread.attach

      • 创建applicationThread,并传递给AMS,使AMS可以通过其远程代理ApplicationThreadProxy调用applicationThread方法,即:

          activityThread      activityManagerProxy--->   AMS
          applicationThread  <---applicationThreadProxy 
        
    • looper.loop()开始循环

  • 创建application时:

    • AMS通过applicationThreadProxy传递信息给applicationThread--->sendMessage将信息传递给H类handler--->
    • H类(继承Handler)handler对事件进行处理--->
    • mInstrumentation初始化(同一进程名内只有一个instrumentation对象)
    • 创建application,若已存在则直接返回application对象,没有则:
      • 创建application ContextImpl对象,得到application.context
      • mInstrumentation通过ClassLoader反射创建application实例,并与application.context绑定
    • mInstrumentation调用application对象onCreate方法
  • 创建activity时:

    • AMS通过applicationThreadProxy调用ApplicationThread.scheduleLaunchActivity--->sendMessage给H类Handler
      --->
      • H.handleLaunchActivity--->
      • activityThread.performLaunchActivity
        • mInstrumentation创建ContextImpl对象,得到activity.context
        • mInstrumentation通过ClassLoader反射创建activity实例,与context绑定
        • mInstrumentation调用activity.onCreate方法

    --->

      * activityThread.performResumeActivity
    
  • activity onResume()后由AMS通过调用绘制View

    • ApplicationThread.scheduleResumeActivity()--->sendMessage给H类handler--->

    • H类(继承Handler)handler对resume事件进行处理--->

    • H.handleResumeActivity()

      --->

      • performResumeActivity()
      • Activity.onResume()
      • mInstrumentation.callActivityOnResume()

      --->

      • WindowManager.addView

参考:

  • Android 应用点击图标到Activity界面显示的过程分析
  • Android视图框架Activity,Window,View,ViewRootImpl理解
  • Android 7.0 ActivityManagerService(1) AMS的启动过程
  • Activity中setContentView浅析

你可能感兴趣的:(AMS)