本文基于 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 流程分析相关推荐

  1. 全志 android 编译,全志A20启动代码流程分析 ——Android

    现在的CPU都固化了内部 ROM,内部 ROM中有一般都有一段程序,一般有如下几个功能: 1,初始化,部分外设,如USB,SDCARD 2,初始化DDR(内存)和NandFlash 3,加载boot( ...

  2. 全志android 编译,全志A20启动代码流程分析 ——Android

    现在的CPU都固化了内部 ROM,内部 ROM中有一般都有一段程序,一般有如下几个功能: 1,初始化,部分外设,如USB,SDCARD 2,初始化DDR(内存)和NandFlash 3,加载boot( ...

  3. ATMS启动Activity流程 - 安卓R

    一般在app中通过context.startActivity方法启动Activity,这个方法最终会通过binder调用frameworks/base/services/core/java/com/a ...

  4. 关于android隐式启动activity的分析和说明,Android学习之Intent中显示意图和隐式意图的用法实例分析...

    本文实例讲述了Android学习之Intent中显示意图和隐式意图的用法.分享给大家供大家参考,具体如下: Intent(意图)主要是解决Android应用的各项组件之间的通讯. Intent负责对应 ...

  5. 手机安全卫士(一)----- 启动界面流程分析

    到了期末了,Android这门课程也结束了,剩下的就是期末考试.考完试就是暑假,这个假期对于我来说是非常重要的,要处理的事情很多,在这,希望自己能利用好这个暑假,其中有一项目标就是看视频写个手机安全卫 ...

  6. 【Android 启动过程】Activity 启动源码分析 ( ActivityThread 流程分析 二 )

    文章目录 前言 一.ActivityManagerService.attachApplicationLocked 二.ActivityStackSupervisor.attachApplication ...

  7. c++builder启动了怎么停止_App 竟然是这样跑起来的 —— Android App/Activity 启动流程分析...

    在我的上一篇文章: AJie:按下电源键后竟然发生了这一幕 -- Android 系统启动流程分析​zhuanlan.zhihu.com 我们分析了系统在开机以后的一系列行为,其中最后一阶段 AMS( ...

  8. Android Activity的启动流程分析:以Launcher启动一个Activity为例,分析应用进程的创建、Activity的启动,以及他们和AMS之间的交互

    文章目录 一. Step1 - Step 11:Launcher通过Binder进程间通信机制通知ActivityManagerService,它要启动一个Activity: Step 1. Laun ...

  9. Cocos2d-x3.3RC0的Android编译Activity启动流程分析

    http://www.itnose.net/detail/6142692.html 本文将从引擎源码Jni分析Cocos2d-x3.3RC0的Android Activity的启动流程,下面是详细分析 ...

  10. Android 8.0 Activity启动流程分析

    Activity启动过程中需要注意的一些类: Instrumentation     完成对Application和Activity初始化和生命周期调用的工具类.用来监控系统与应用的交互. Activ ...

最新文章

  1. 关于TVM的点滴记录
  2. 会话保持之iRule脚本
  3. DARPA将开发无需手术的神经技术,实现脑机接口
  4. PHP学习系列(1)——字符串处理函数(3)
  5. 深度学习应用实战案例-员工流失预测模型(Python源代码)
  6. 2008年CCNA第二学期第九单元题目(2008-12-14 14:04:38)
  7. 坦克游戏服务器未响应,《坦克世界》退出战斗 退出战斗卡死解决办法
  8. 扣绩效,从来都不会让团队变得更好
  9. Linux虚拟化KVM-Qemu分析(九)之virtio设备
  10. zookeeper使用简介及注意事项
  11. Java执行jar总结
  12. 《学习opencv》笔记——关于一些画图的函数
  13. Ueditor word图片转存按钮灰色无法激活
  14. .NET源码 生产制造业通用管理ERP系统 财务生产管理网站 源码
  15. pdf文档安全权限去除
  16. 【解决】联想拯救者/MT7921网卡 ubuntu里 wifi/蓝牙 无法识别连接
  17. 如何在Mac电脑上打开终端
  18. 如何用SolidWorks软件绘制三维模型?
  19. python3 mysql插入数据冲突
  20. Gym 100015B Ball Painting

热门文章

  1. 国外优秀JAVA技术网站推荐
  2. 微信公众平台测试帐号申请及Token验证地址提供
  3. windows下端口映射(端口转发)
  4. 电脑小写字母怎么切换_WPS“文档”——大小写字母快速转换
  5. 电脑本地连接,电脑出现多个“本地连接”的解决方法
  6. 隧道管廊UWB定位系统解决方案
  7. 阿里云ace认证内容有哪些?
  8. 关于RN报Unrecognized font family ionicons
  9. google地图距离算法_java – 使用谷歌地图计算实际行进距离
  10. 8个PNG素材网站,每一个都让你觉得人生发亮