Activity启动原理

1,059 阅读1分钟

Activity 启动方法堆栈

1. Instrumentation.execStartActivity
2. ActivityManagerProxy.startActivity
3. ActivityManagerService.startActivity
4. ActivityStack.startActivityMayWait
5. ActivityStack.startActivityLocked
6. ActivityStack.startActivityUncheckedLocked
7. Activity.resumeTopActivityLocked
8. ActivityStack.startPausingLocked
9. ApplicationThreadProxy.schedulePauseActivity
10. ApplicationThread.schedulePauseActivity
11. ActivityThread.queueOrSendMessage
12. H.handleMessage
13. ActivityThread.handlePauseActivity
14. ActivityManagerProxy.activityPaused
15. ActivityManagerService.activityPaused
16. ActivityStack.activityPaused
17. ActivityStack.completePauseLocked
18. ActivityStack.resumeTopActivityLokced
19. ActivityStack.startSpecificActivityLocked
20. ActivityManagerService.startProcessLocked
21. ActivityThread.main
22. ActivityManagerProxy.attachApplication
23. ActivityManagerService.attachApplication
24. ActivityManagerService.attachApplicationLocked
25. ActivityStack.realStartActivityLocked
26. ApplicationThreadProxy.scheduleLaunchActivity
27. ApplicationThread.scheduleLaunchActivity
28. ActivityThread.queueOrSendMessage
29. H.handleMessage
30. ActivityThread.handleLaunchActivity
31. ActivityThread.performLaunchActivity

总结

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

  • Step 1:Launcher通过Binder进程间通信机制通知ActivityManagerService,它要启动一个Activity;
  • Step 2:ActivityManagerService通过Binder进程间通信机制通知Launcher进入Paused状态;
  • Step 3:Launcher通过Binder进程间通信机制通知ActivityManagerService,它已经准备就绪进入Paused状态,于是ActivityManagerService就创建一个新的进程,用来启动一个ActivityThread实例,即将要启动的Activity就是在这个ActivityThread实例中运行;
  • Step 4:ActivityThread通过Binder进程间通信机制将一个ApplicationThread类型的Binder对象传递给ActivityManagerService,以便以后ActivityManagerService能够通过这个Binder对象和它进行通信;
  • Step 5:ActivityManagerService通过Binder进程间通信机制通知ActivityThread,现在一切准备就绪,它可以真正执行Activity的启动操作了。 这样,应用程序的启动过程就介绍完了,它实质上是启动应用程序的默认Activity。