工作流程

AMS的工作流程,其实就是Activity的启动和调度的过程,所有的启动方式,最终都是通过Binder机制的Client端,调用Server端的AMS的startActivityXXX()系列方法。所以可见,工作流程又包括Client端和Server端两个。

Client端流程

  • Launcher主线程捕获onClick()点击事件后,调用Launcher.startActivitySafely()方法。Launcher.startActivitySafely()内部调用了Launcher.startActivity()方法,Launcher.startActivity()内部调用了Launcher的父类Activity的startActivity()方法。
  • Activity.startActivity()调用Activity.startActivityForResult()方法,传入该方法的requestCode参数若为-1,则表示Activity启动成功后,不需要执行Launcher.onActivityResult()方法处理返回结果。
  • 启动Activity需要与系统ActivityManagerService交互,必须纳入Instrumentation的监控,因此需要将启动请求转交instrumentation,即调用Instrumentation.execStartActivity()方法。
  • Instrumentation.execStartActivity()首先通过ActivityMonitor检查启动请求,然后调用ActivityManagerNative.getDefault()得到ActivityManagerProxy代理对象,进而调用该代理对象的startActivity()方法。
  • ActivityManagerProxy是ActivityManagerService的代理对象,因此其内部存储的是BinderProxy,调用ActivityManagerProxy.startActivity()实质是调用BinderProxy.transact()向Binder驱动发送START_ACTIVITY_TRANSACTION命令。Binder驱动将处理逻辑从Launcher所在进程切换到ActivityManagerService所在进程。

作者:thinkChao
链接:https://www.jianshu.com/p/47eca41428d6
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

Acticity 启动 AMS相关推荐

  1. 【Android 插件化】Hook 插件化框架 ( Hook Activity 启动流程 | AMS 启动前使用动态代理替换掉插件 Activity 类 )

    Android 插件化系列文章目录 [Android 插件化]插件化简介 ( 组件化与插件化 ) [Android 插件化]插件化原理 ( JVM 内存数据 | 类加载流程 ) [Android 插件 ...

  2. Android中AMS工作原理,Android AMS启动详解

    启动 在Android系统启动流程中中我们提到过,AMS是在system_service中启动的, //frameworks/base/services/java/corri/android/serv ...

  3. 手把手带你搞懂AMS启动原理

    彻底搞懂AMS即ActivityManagerService,看这一篇就够了 前言 最近那么多教学视频(特别是搞车载的)都在讲AMS,可能这也跟要快速启动一个app(甚至是提高安卓系统启动速度有关), ...

  4. Activity启动流程和启动模式源码解析

    Acticity启动流程 1.根启动的流程:从桌面点击图标,到启动Activity的页面 Activity启动之前 init进程->Zygote进程->SystemService进程和La ...

  5. android运行过程简书,Android系统的启动流程

    Android系统有哪些进程 在Linux系统启动时,会读取init.rc,里面配置了一些需要启动的进程.注意:SystemServer进程不在init.rc里,因为SystemServer进程是由z ...

  6. Android 10.0 系统服务之ActivityMnagerService-AMS启动流程-[Android取经之路]

    摘要:上一节我们讲完了SystemServer的启动过程,这一节接着上一节的步骤,来讲解ActivityManagerService的启动过程. ActivityManagerService简称AMS ...

  7. 【Android 插件化】Hook 插件化框架总结 ( 插件包管理 | Hook Activity 启动流程 | Hook 插件包资源加载 ) ★★★

    Android 插件化系列文章目录 [Android 插件化]插件化简介 ( 组件化与插件化 ) [Android 插件化]插件化原理 ( JVM 内存数据 | 类加载流程 ) [Android 插件 ...

  8. 【Android 插件化】Hook 插件化框架 ( Hook Activity 启动流程 | 主线程创建 Activity 实例之前使用插件 Activity 类替换占位的组件 )

    Android 插件化系列文章目录 [Android 插件化]插件化简介 ( 组件化与插件化 ) [Android 插件化]插件化原理 ( JVM 内存数据 | 类加载流程 ) [Android 插件 ...

  9. Android4.4 framework分析——ActivityManagerService的启动和对Activity的管理

    本文主要介绍android4.4中ActivityManagerService的启动和ActivityManagerService对Activity堆栈的管理. 一.ActivityManagerSe ...

最新文章

  1. 关于微信 setData 回调函数中的坑
  2. Python处理mat文件的三种方式
  3. ubuntu建站遇到的mysql数据库问题
  4. mysql 魔术设置_详解php魔术方法(Magic methods)的使用方法
  5. Vagrant 构建 Linux 开发环境
  6. 修改MYSQL最大连接数的3种方法
  7. Android 性能优化---(8)APP启动时间优化指南
  8. GPT Plus Money!B O O M
  9. dbMigration .NET 数据同步迁移工具
  10. ijkplayer框架详解
  11. 2d游戏中关于碰撞以及渲染层级关系
  12. linux ftp配置和使用
  13. 2019寒假专题一 L CodeForces - 1260B
  14. request.getParameter();的作用
  15. python运用在大数据_python 大数据 应用场景
  16. 使用 arxiv-sanity 实时跟进自己研究领域的Paper
  17. 沪铅上市十周年 “铅华”与本色尽显
  18. 徐翰文-ArcGIS学习
  19. 【Java Swing探索之路系列】之二:Java Swing布局面板组件
  20. c语言常量2l是什么,2017年计算机二级c语言题库

热门文章

  1. 理解ASP.NET中的三层结构
  2. 用VC写Assembly代码(7)--在Visual C++中使用内联汇编
  3. 现在人人都要准备的2020年六个事关职业生涯的技术趋势
  4. 为什么程序员的社会地位不高?
  5. 这可能是现实版程序员!
  6. 我是不会运行你的代码吗?不,我是不会导入自己的数据!
  7. 基因组中的趣事(二)- 最长的基因2.7 million,最短的基因只有8 nt却能编码
  8. 多功能mac代码编辑神器coderunner 4 比Xcode都强大
  9. P3954 [NOIP2017 普及组] 成绩(python3实现)
  10. android sp wp实例,android sp wp详解