searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

Activity启动流程

2023-09-22 08:46:33
2
0

Activity启动中涉及到的核心相关类有:

  • ActivityManagerService:由SystemServer进程创建,实体运行在Binder服务端,远程操作Activity的生命周期。
  • ActivityThread:ActivityThread通过和AMS进行IPC通信来共同管理Activity的生命周期。
  • ApplicationThread:ActivityThread的内部类,本质上ActivityThread是通过它来进行和AMS的IPC通信的。其实体运行在客户端,AMS通过代理类与ApplicationThread通信。
  • Instrumentation:这个类有点像整个操作链的最外层,是ActivityThread操作的具体操作类,Activity中持有它的引用,在这个类中调用Activity相关的生命周期回调。
  • ActivityStack(AMS中):Activity栈,由AMS管理,AMS通过这个数据结构来得知activity的状态。
  • ActivityStackSuperisor(AMS中):Activity栈的管理者,这个类的作用就是管理栈,并且通过ActivityStack来获得要启动的activity的信息。
  • ActivityRecord:服务端的Actiivty信息载体类,在ActivityStack里面存储的并不是Activity实例,而是ActivityRecord的实例。
  • TaskRecord:ActivityTask的信息记录类。
 
对于App来说,其Activity的生命周期执行是与系统进程中的ActivityManagerService有一定关系的,这里涉及到系统进程和应用进程:
  • system_server进程是系统进程,Java framework框架的核心载体,里面运行了大量的系统服务,比如ActivityManagerService(简称AMS)等,这些服务都运行在system_server进程的不同线程中,由于AMS等都是基于IBinder接口,都是binder线程,binder线程的创建与销毁都是由binder驱动来决定的。
  • App进程是应用程序所在进程,主线程主要负责Activity/Service等组件的生命周期以及UI相关操作都运行在这个线程。

启动流程总结如下:

  1. 点击桌面App图标,Launcher进程采用Binder IPC向system_server进程发起startActivity请求;
  2. system_server进程接收到请求后,通过socket向zygote进程发送创建进程的请求;
  3. Zygote进程fork出新的子进程,即App进程;
  4. App进程,通过Binder IPC向sytem_server进程发起attachApplication请求;
  5. system_server进程在收到请求后,进行一系列准备工作后,再通过binder IPC向App进程发送bindApplication请求;
  6. App进程的binder线程(ApplicationThread)在收到请求后,通过handler向主线程发送BIND_APPLICATION消息;
  7. 主线程在收到Message后,通过反射机制创建Application对象,并初始化以及执行相关回调;
  8. system_server进程在创建了目标app进程后,会通过app进程的IBinder对象发送EXECUTE_TRANSACTION类型的Message给app进程的主线程,主线程收到消息后,开始执行ClientTransactionItem和ActivityLifecycleItem的execute方法,在其内部会通过反射创建Activity实例,并执行Activity的生命周期调用。

相关的代码调用如下图:

 
0条评论
0 / 1000
wbq
18文章数
0粉丝数
wbq
18 文章 | 0 粉丝
wbq
18文章数
0粉丝数
wbq
18 文章 | 0 粉丝
原创

Activity启动流程

2023-09-22 08:46:33
2
0

Activity启动中涉及到的核心相关类有:

  • ActivityManagerService:由SystemServer进程创建,实体运行在Binder服务端,远程操作Activity的生命周期。
  • ActivityThread:ActivityThread通过和AMS进行IPC通信来共同管理Activity的生命周期。
  • ApplicationThread:ActivityThread的内部类,本质上ActivityThread是通过它来进行和AMS的IPC通信的。其实体运行在客户端,AMS通过代理类与ApplicationThread通信。
  • Instrumentation:这个类有点像整个操作链的最外层,是ActivityThread操作的具体操作类,Activity中持有它的引用,在这个类中调用Activity相关的生命周期回调。
  • ActivityStack(AMS中):Activity栈,由AMS管理,AMS通过这个数据结构来得知activity的状态。
  • ActivityStackSuperisor(AMS中):Activity栈的管理者,这个类的作用就是管理栈,并且通过ActivityStack来获得要启动的activity的信息。
  • ActivityRecord:服务端的Actiivty信息载体类,在ActivityStack里面存储的并不是Activity实例,而是ActivityRecord的实例。
  • TaskRecord:ActivityTask的信息记录类。
 
对于App来说,其Activity的生命周期执行是与系统进程中的ActivityManagerService有一定关系的,这里涉及到系统进程和应用进程:
  • system_server进程是系统进程,Java framework框架的核心载体,里面运行了大量的系统服务,比如ActivityManagerService(简称AMS)等,这些服务都运行在system_server进程的不同线程中,由于AMS等都是基于IBinder接口,都是binder线程,binder线程的创建与销毁都是由binder驱动来决定的。
  • App进程是应用程序所在进程,主线程主要负责Activity/Service等组件的生命周期以及UI相关操作都运行在这个线程。

启动流程总结如下:

  1. 点击桌面App图标,Launcher进程采用Binder IPC向system_server进程发起startActivity请求;
  2. system_server进程接收到请求后,通过socket向zygote进程发送创建进程的请求;
  3. Zygote进程fork出新的子进程,即App进程;
  4. App进程,通过Binder IPC向sytem_server进程发起attachApplication请求;
  5. system_server进程在收到请求后,进行一系列准备工作后,再通过binder IPC向App进程发送bindApplication请求;
  6. App进程的binder线程(ApplicationThread)在收到请求后,通过handler向主线程发送BIND_APPLICATION消息;
  7. 主线程在收到Message后,通过反射机制创建Application对象,并初始化以及执行相关回调;
  8. system_server进程在创建了目标app进程后,会通过app进程的IBinder对象发送EXECUTE_TRANSACTION类型的Message给app进程的主线程,主线程收到消息后,开始执行ClientTransactionItem和ActivityLifecycleItem的execute方法,在其内部会通过反射创建Activity实例,并执行Activity的生命周期调用。

相关的代码调用如下图:

 
文章来自个人专栏
移动开发
13 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0