AMS

作者: 鹤书嗣音 | 来源:发表于2018-08-28 01:02 被阅读0次
    • 桌面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

    参考:

    相关文章

      网友评论

          本文标题:AMS

          本文链接:https://www.haomeiwen.com/subject/ghbxwftx.html