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

参考:

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容