1. (Activity类)startActivity()-->Actvity.startActivityForResult()
2. (Instrumentation类).execStartActivity()
3. (ActivityManager类) .startActivity()
4. (ActivityManagerService类) .startActivity()->startActivityAsUser()
5. (ActivityStarter类) .startActivityMayWait()->startActivityLocked()->startActivity()->startActivity()
->resumeTopActivityInnerLocked()-> startActivityUnchecked()
6. (ActivityStackSupervisor类).resumeFocuesdStackTopActivityLocked()
7. (ActivityStack类).resumeTopActivityUncheckedLocked()->resumeTopActivityInnerLocked()//这个方法会去判断是否有Activity处于onResume状态,有的话先让这个Activity执行onPause(),最后启动要启动的Activity
8. (ActivityStackSupervisor类) .startSpecificActivityLocked()//这个方法会判断要跳转的Activity所在的app是否已经启动,没有的话则需要创建进程启动,有的话走realStartActivityLocked() ->realStartActivityLocked()//这个方法调用了
app.thread.scheduleLaunchActivity(),app.thread是IApplicationThread在AMS服务进程中的代理对象,最终调用到ApplicationThread的scheduleLaunchActivity()
9. (ApplicationThread类) .scheduleLaunchActivity()->通过Handler消息LAUNCH_ACTIVITY
10. (ActivityThread类) .handleLaunchActivity()->performLaunchActivity()
11. (Instrumentation类) .newActivity()//通过反射创建Activity的实例
12. (Activity类) .attach()
13. (Instumentation类) .callActivityOnCreate()
14. (Activity类) .onCreate()
15. (Activity类) .performStart()
16. (Instrumentation类) .callActivityOnStart()
17. (Activity类) .onStart()
18. (ActivityThread类) .handleResumeActivity()//这个方法走onResume()生命周期,然后调用WindowManagerImpl.addView,来创建ViewRootImpl。
19. (WindowManagerImpl类) .addView()
20. (WindowManagerGlobal类) .addView()//这个方法创建ViewRootImpl,在子线程中更新UI时报错信息就是在ViewRootImpl 中的checkThread()方法中
21. (ViewRootImpl类) .setView()//在这个方法里执行了requestLayout()函数,说明页面获取了焦点,这个也说明了为什么onResume()后页面才可以交互
Android Activity启动流程详解
最新推荐文章于 2024-05-23 08:30:00 发布