Activity 启动流程

 Step 1. Launcher.startActivitySafely

 Step 2. Activity.startActivity

Step 3. Activity.startActivityForResult

Step 4. Instrumentation.execStartActivity

Step 5. ActivityManagerProxy.startActivity

 Step 6. ActivityManagerService.startActivity

Step 7. ActivityStack.startActivityMayWait

Step 8. ActivityStack.startActivityLocked

Step 9. ActivityStack.startActivityUncheckedLocked

Step 10. Activity.resumeTopActivityLocked

Step 11. ActivityStack.startPausingLocked

 

Step 12. ApplicationThreadProxy.schedulePauseActivity

 Step 13. ApplicationThread.schedulePauseActivity

 Step 14. ActivityThread.queueOrSendMessage

Step 15. H.handleMessage

 Step 16. ActivityThread.handlePauseActivity

Step 17. ActivityManagerProxy.activityPaused

 Step 18. ActivityManagerService.activityPaused

Step 19. ActivityStack.activityPaused

 Step 20. ActivityStack.completePauseLocked

Step 21. ActivityStack.resumeTopActivityLokced

Step 22. ActivityStack.startSpecificActivityLocked

Step 23. ActivityManagerService.startProcessLocked

 Step 24. ActivityThread.main

 Step 25. ActivityManagerProxy.attachApplication

Step 26. ActivityManagerService.attachApplication

 Step 27. ActivityManagerService.attachApplicationLocked

Step 28. ActivityStack.realStartActivityLocked

Step 29. ApplicationThreadProxy.scheduleLaunchActivity

Step 30. ApplicationThread.scheduleLaunchActivity

Step 31. ActivityThread.queueOrSendMessage

Step 32. H.handleMessage

Step 33. ActivityThread.handleLaunchActivity

Step 34. ActivityThread.performLaunchActivity

 Step 35. MainActivity.onCreate

整个应用程序的启动过程要执行很多步骤,但是整体来看,主要分为以下五个阶段:

       一. Step1 - Step 11:Launcher通过Binder进程间通信机制通知ActivityManagerService,它要启动一个Activity, Launcher.startActivitySafely ,Activity.resumeTopActivityLocked;

       二. Step 11 - Step 20:ActivityManagerService通过Binder进程间通信机制通知Launcher进入Paused状态 ActivityStack.completePauseLocked;

       三. Step 21 - Step 22:做启动新的Activity的准备工作,Launcher通过Binder进程间通信机制通知ActivityManagerService,它已经准备就绪进入Paused状态,于是ActivityManagerService就去启动新的Activity,先创建一个新的进程,用来启动一个ActivityThread实例,即将要启动的Activity就是在这个ActivityThread实例中运行,ActivityStack.resumeTopActivityLokced;

       四. Step 23 - Step 27:ActivityThread通过Binder进程间通信机制将一个ApplicationThread类型的Binder对象传递给ActivityManagerService,以便以后ActivityManagerService能够通过这个Binder对象和它进行通信 ActivityManagerService.startProcessLocked,ActivityManagerService.attachApplicationLocked;

       五. Step 28 - Step 35:ActivityManagerService通过Binder进程间通信机制通知ActivityThread,现在一切准备就绪,它可以真正执行Activity的启动操作了,通过 ActivityStack.realStartActivityLocked最终调用 MainActivity.onCreate。

posted @ 2021-12-29 20:00  雨过天晴168  阅读(181)  评论(0)    收藏  举报