启动Activity的过程

来源:互联网 发布:郭德纲于谦 知乎 编辑:程序博客网 时间:2024/06/05 19:30

这里涉及到四个模块:ActivityManagerService用来管理Activity的生命周期;ActivityStack将创建的Activity放入到堆栈中;ActivityThread它是真正用来启动Activity的;ActivityThread会创建一个ApplicationThread类型的Binder实例用来ActivityManagerService和ActivityThread进程间通信的。ActivityManagerService和ActivityStack在同一个进程,而AcitivityThread和ApplicationThread在另一个进程。


启动Activity分两种:通过点击图标启动Activity的过程和在Activity内部启动一个新的Activity

对于通过点击图标启动:

启动过程大致分为五步:

1, 当点击图标后,Launcher通过Binder进程间通信机制通知ActivityManagerService它要启动一个Activity了;

2, AcitivityManagerService通过Binder通知Launcher需要进入pause状态;

3, Laucher通过Binder通知AcitvityMangerService它已经就绪,进入pause状态了;于是ActivityManagerService就创建一个ActivityThread实例,启动了一个新的进程,即将要启动的Activity就运行在这个进程。

4, ActivityThread就通过Binder进程间通信机制将一个ApplicationThread类型的Binder实例传递给ActivityManagerService,以便ActivityManagerService用这个Binder实例和它进行进程间通信;

5,ActivityManagerService通过Binder进程间通信机制通知ActivityThread一切准备就绪可以启动一个新的Activity了。


对于Activity内部启动:

1, MainActivity通过Binder进程间通信机制告诉ActivityManagerService它要启动一个新的Activity了;

2, ActivityManagerService通过Binder进程间通信机制告诉MainActivity进入pause状态;

3, MainActivity通过Binder进程间通信告诉ActivityManagerService它已经就绪进入pause状态了;于是ActivityManagerService即将在MainActivity的进程中创建一个新的Activity。

4, ActivityManagerService通过Binder进程间通信机制告诉MainActivity所在的进程ActivityThread一切准备就绪,启动启动一个新的Activity吧

0 0