美文网首页
APP的启动流程分析

APP的启动流程分析

作者: XX杰 | 来源:发表于2021-12-23 11:21 被阅读0次

    /**

    • 1、ActivityThread 中的 main 方法
    • 2、thread.attach(false, startSeq);
    •  //  ActivityManager.getService 通过 IBinder(AIDL) 获取 系统 的 ACTIVITY_SERVICE
      
    •  IActivityManager mgr = ActivityManager.getService();
      
    •  mgr.attachApplication(mAppThread, startSeq);
      
    • 3、因为 attachApplication 方法, 所以 mAppThread 可以被 mgr 知道, 所以可以被系统知道
    •  mAppThread 就是 ApplicationThread
      
    • 4、ActivityManagerService 中实现了 attachApplication 方法
    •  在其中调用 attachApplicationLocked  然后 调用 ApplicationThread 中 的 bindApplication
      
    •  在 ActivityThread 中通过 他的 Handler 消息机制 调用 handleBindApplication 方法
      
    •  /**
      
    •  final ClassLoader cl = instrContext.getClassLoader();
      
    •  mInstrumentation = (Instrumentation)
      
    •  cl.loadClass(data.instrumentationName.getClassName()).newInstance();
      

    • 5、 handleBindApplication 方法中 mInstrumentation.callApplicationOnCreate 调用 application 的 onCreate
    • 6、 当Application初始化完成后,系统会根据 Manifests 中的配置的启动 Activity 发送一个Intent去启动相应的Activity
    •  https://www.cnblogs.com/huan89/p/14111363.html
      
    •  这里有一个问题 : 我没看过 launcher 是如何启动一个 app 的 通过上面的网址可以得知
      
    •     是 launcher 调用了 系统服务进程 AMS 的 startActivity 方法。但是不太明白,launcher 的调用顺序是怎么样的
      
    •         (是根据什么判断先走了 ActivityThread 中的 main 方法,启动了 application, 在调用了 startActivity)
      
    • 7、前提:假如上面的 网址成立
    •  AMS 中 的 startActivity 方法。 然后  ActivityStarter 类中 的 execute 方法 --> startActivity 方法
      
    •  --> startActivityUnchecked 方法
      
    •  接着 进入 ActivityStackSupervisor 类中的 resumeFocusedStackTopActivityLocked 方法 根据activity的状态 判断
      
    •  进入 ActivityStack 中的 resumeTopActivityUncheckedLocked 方法 --> resumeTopActivityInnerLocked
      
    •  ActivityStackSupervisor 中的 realStartActivityLocked
      
    •  再次回到 ActivityStack 中的 resumeTopActivityUncheckedLocked --> resumeTopActivityInnerLocked
      
    •  再回到 ActivityStackSupervisor startSpecificActivityLocked --> realStartActivityLocked
      
    •          mService.getLifecycleManager().scheduleTransaction(clientTransaction);
      
    •        根据上面的方法 ClientLifecycleManager 类中的  scheduleTransaction 方法
      
    •              getLifecycleManager() 是 AMS 中的 方法
      
    • 8、 ClientTransaction 中 持用 IApplicationThread 这样的话 scheduleTransaction
    •  这样的话 又 回到 了  ActivityThread extends ClientTransactionHandler 中的方法 通过 Handler 发送消息
      
    •  在Handler 中 对 TransactionExecutor 进行 事务 的处理  execute  -->  executeLifecycleState
      
    •  LaunchActivityItem 中的   client.handleLaunchActivity(r, pendingActions, null // customIntent)
      
    • 就是  ActivityThread 中的 handleLaunchActivity 方法  就启动 activity 了
      
    • 9、 启动 activity 的方法 依旧是 类加载器 performLaunchActivity 中的 mInstrumentation.newActivity
    •      mInstrumentation.callActivityOnCreate(activity, r.state)
      

    */

    相关文章

      网友评论

          本文标题:APP的启动流程分析

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