Activity启动过程分析

Activity 的启动过程:

1.从startActivty 方法进入跳转至
2.startActivtyforResult() 参数中含有mMainThread.getApplationThread()
这个方法的类型是ApplactionThread 它 是ActivityThread的一个内部类

调用AMS部分
3.执行execStartActivity方法() 这个方法的真正实现者是ActivityManagerNative.getDefault();

继承自ActivityManagerService而AMN 继承自binder 并实现了IActivityManager 这个Binder真正的操作方法在AMS中的startActivity方法中

栈部分
4.在执行execStartActivity 方法中还有一个checkActivityResult();这个方法是用来检测activity 是否正常启动当无法正常启动时则会报出异常信息。
5.由此进入至 ActivityStackSupervisor中
6.执行startActivityMayWait
7.执行StartActivityLocked
8.执行StartAcitityUncheackLocked
9.进入ActivityStack 中
10.执行resumeTopActivityLocked
11.回到ActivityStakSuperviser 中
12.执行StartSpecificAcitvitylocked
13.执行realStartActivityLocked

在realStart ActivityLock中代码
app.thread.scheduleLaunchActivity 其中appthread类型为IapplicationThread
在这个接口函数中声明了大量的关于启动和停止的方法。
由此我们推测这个接口的实现者 完成了大量的工作。
推测这个实现者是AcitivityThread 中的内部类AppliactionThread
14.执行的scheduleLaunchActivity 即是ApplicationThread的schedulelaunchAcitivity方法
发送一个启动Activity 的handler消息给handler 处理 handler 的名称为 H
15.Handler 的处理方式由 ActivityThread的handlelaunchAcitivity方法实现
其中交给handleResumeActivity方法来调用被启动的Activity 的onResume这一个生命周期
16交给performLaunchActivity最终完成了Activity 的启动过程

17PerFormLaunchActivity 主要完成的几件事
1.从ActivityClientRecord中获取待启动的Activity 的信息
2.通过Instrumentation 的newActivity 方法 通过类加载器加载Activity 对象
3.通过LoadedApk 的makeApplication 方法创建Application 调用Application 的oncreate方法
4.创建 ContextImpl对象并通过attach方法来完成一些数据的初始化。
这里还会完成window 关联等。 并调用activity 的onCreate方法

ContextImpl 创建特殊的单例模式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Android 中,Activity启动过程是由 ActivityManagerService (AMS) 负责的。AMS 接收到启动 Activity 的请求后,会将该请求保存在 Activity 栈中,并通过 Binder 机制将该请求发送给 ActivityThread 进程中的 H 块(即 ActivityThread 中的主线程 Handler)。H 块接收到请求后,会创建要启动的 Activity 的实例,并调用其 onCreate() 方法进行初始化。接下来,AMS 会将该 Activity 的窗口添加到 WindowManagerService (WMS) 中,并调用 Activity 的 onStart()、onResume() 等方法,使其进入运行状态。 具体来说,ActivityRecord 是一个代表 Activity 的数据结构,其中包含了该 Activity 的各种信息,例如包名、类名、启动模式、Intent 等。AMS 在启动 Activity 时,会创建一个新的 ActivityRecord 对象,并将其添加到 Activity 栈中。这个过程通常包括以下几个步骤: 1. AMS 接收到启动 Activity 的请求,解析该请求中的 Intent,并将其封装成一个 ActivityRecord 对象。 2. AMS 根据启动模式和任务栈的情况,决定将该 Activity 添加到哪个任务栈中(或者创建新的任务栈),并将该 ActivityRecord 对象保存到 Activity 栈中。 3. AMS 将该请求发送给 ActivityThread 中的 H 块,请求 H 块创建要启动的 Activity 实例。 4. H 块接收到请求后,在主线程中创建 Activity 实例,并调用其 onCreate() 方法进行初始化。这个过程通常包括加载布局、初始化控件、设置监听器等操作。 5. H 块创建 Activity 实例后,会将其保存到 Activity 栈中,并将其窗口添加到 WMS 中。 6. AMS 接收到 ActivityThread 发送的消息,表示 Activity 已经准备好了,然后 AMS 会调用Activity 的 onStart()、onResume() 等方法,使其进入运行状态。 需要注意的是,在启动 Activity 过程中,还会涉及到权限检查、应用启动优化、Activity 生命周期管理等方面的处理,这些都是由 AMS 和系统框架中的其他部分共同完成的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值