am 启动 activity 流程分析
本文基于 Android 7.1.1 的源码进行分析。
am 启动 app 方式: am start package/activity
am 代码位置: com.android.commands.am.Am.java
main -> runStart()
调用 IActivityManager 的binder实例来执行安装任务,在 runStart函数中,根据传入的包名和activity名构建了一个intent,并且增加了标志:FLAG_ACTIVITY_NEW_TASK。
private void runStart() throws Exception {Intent intent = makeIntent(UserHandle.USER_CURRENT);......intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);if (mWaitOption) {result = mAm.startActivityAndWait(null, null, intent, mimeType,null, null, 0, mStartFlags, profilerInfo,options != null ? options.toBundle() : null, mUserId);res = result.result;} else {res = mAm.startActivityAsUser(null, null, intent, mimeType,null, null, 0, mStartFlags, profilerInfo,options != null ? options.toBundle() : null, mUserId);}........
}
由代码可以看到,如果使用了 -W 参数,则会走 startActivityAndWait 函数,否则走 startActivityAsUser 函数,这两个函数在 ActivityManagerService 中都有实现。
com.android.server.am.ActivityManagerService.java
1. startActivityAndWait ->mActivityStarter.startActivityMayWait
2. startActivityAsUser -> mActivityStarter.startActivityMayWait
实际启动app的过程是由 ActivityStarter 类完成的
com.android.server.am.ActivityStarter.java
这里面做了解析 activity 信息,做合法性检查,再根据启动标志觉得是从堆栈中拿现成的 activity还是创建一个,最后调用 ActivityStack 来完成启动;
startActivityMayWait->startActivityLocked->doPendingActivityLaunchesLocked->startActivityUnchecked->mTargetStack.startActivityLocked
com.android.server.am.ActivityStack.java
ActivityStack的函数 startActivityLocked 主要 mWindowManager.prepareAppTransition 进行堆栈中的任务切换;
am 启动 activity 流程分析相关推荐
- 全志 android 编译,全志A20启动代码流程分析 ——Android
现在的CPU都固化了内部 ROM,内部 ROM中有一般都有一段程序,一般有如下几个功能: 1,初始化,部分外设,如USB,SDCARD 2,初始化DDR(内存)和NandFlash 3,加载boot( ...
- 全志android 编译,全志A20启动代码流程分析 ——Android
现在的CPU都固化了内部 ROM,内部 ROM中有一般都有一段程序,一般有如下几个功能: 1,初始化,部分外设,如USB,SDCARD 2,初始化DDR(内存)和NandFlash 3,加载boot( ...
- ATMS启动Activity流程 - 安卓R
一般在app中通过context.startActivity方法启动Activity,这个方法最终会通过binder调用frameworks/base/services/core/java/com/a ...
- 关于android隐式启动activity的分析和说明,Android学习之Intent中显示意图和隐式意图的用法实例分析...
本文实例讲述了Android学习之Intent中显示意图和隐式意图的用法.分享给大家供大家参考,具体如下: Intent(意图)主要是解决Android应用的各项组件之间的通讯. Intent负责对应 ...
- 手机安全卫士(一)----- 启动界面流程分析
到了期末了,Android这门课程也结束了,剩下的就是期末考试.考完试就是暑假,这个假期对于我来说是非常重要的,要处理的事情很多,在这,希望自己能利用好这个暑假,其中有一项目标就是看视频写个手机安全卫 ...
- 【Android 启动过程】Activity 启动源码分析 ( ActivityThread 流程分析 二 )
文章目录 前言 一.ActivityManagerService.attachApplicationLocked 二.ActivityStackSupervisor.attachApplication ...
- c++builder启动了怎么停止_App 竟然是这样跑起来的 —— Android App/Activity 启动流程分析...
在我的上一篇文章: AJie:按下电源键后竟然发生了这一幕 -- Android 系统启动流程分析zhuanlan.zhihu.com 我们分析了系统在开机以后的一系列行为,其中最后一阶段 AMS( ...
- Android Activity的启动流程分析:以Launcher启动一个Activity为例,分析应用进程的创建、Activity的启动,以及他们和AMS之间的交互
文章目录 一. Step1 - Step 11:Launcher通过Binder进程间通信机制通知ActivityManagerService,它要启动一个Activity: Step 1. Laun ...
- Cocos2d-x3.3RC0的Android编译Activity启动流程分析
http://www.itnose.net/detail/6142692.html 本文将从引擎源码Jni分析Cocos2d-x3.3RC0的Android Activity的启动流程,下面是详细分析 ...
- Android 8.0 Activity启动流程分析
Activity启动过程中需要注意的一些类: Instrumentation 完成对Application和Activity初始化和生命周期调用的工具类.用来监控系统与应用的交互. Activ ...
最新文章
- 关于TVM的点滴记录
- 会话保持之iRule脚本
- DARPA将开发无需手术的神经技术,实现脑机接口
- PHP学习系列(1)——字符串处理函数(3)
- 深度学习应用实战案例-员工流失预测模型(Python源代码)
- 2008年CCNA第二学期第九单元题目(2008-12-14 14:04:38)
- 坦克游戏服务器未响应,《坦克世界》退出战斗 退出战斗卡死解决办法
- 扣绩效,从来都不会让团队变得更好
- Linux虚拟化KVM-Qemu分析(九)之virtio设备
- zookeeper使用简介及注意事项
- Java执行jar总结
- 《学习opencv》笔记——关于一些画图的函数
- Ueditor word图片转存按钮灰色无法激活
- .NET源码 生产制造业通用管理ERP系统 财务生产管理网站 源码
- pdf文档安全权限去除
- 【解决】联想拯救者/MT7921网卡 ubuntu里 wifi/蓝牙 无法识别连接
- 如何在Mac电脑上打开终端
- 如何用SolidWorks软件绘制三维模型?
- python3 mysql插入数据冲突
- Gym 100015B Ball Painting
热门文章
- 国外优秀JAVA技术网站推荐
- 微信公众平台测试帐号申请及Token验证地址提供
- windows下端口映射(端口转发)
- 电脑小写字母怎么切换_WPS“文档”——大小写字母快速转换
- 电脑本地连接,电脑出现多个“本地连接”的解决方法
- 隧道管廊UWB定位系统解决方案
- 阿里云ace认证内容有哪些?
- 关于RN报Unrecognized font family ionicons
- google地图距离算法_java – 使用谷歌地图计算实际行进距离
- 8个PNG素材网站,每一个都让你觉得人生发亮