Acticity 启动 AMS
工作流程
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相关推荐
- 【Android 插件化】Hook 插件化框架 ( Hook Activity 启动流程 | AMS 启动前使用动态代理替换掉插件 Activity 类 )
Android 插件化系列文章目录 [Android 插件化]插件化简介 ( 组件化与插件化 ) [Android 插件化]插件化原理 ( JVM 内存数据 | 类加载流程 ) [Android 插件 ...
- Android中AMS工作原理,Android AMS启动详解
启动 在Android系统启动流程中中我们提到过,AMS是在system_service中启动的, //frameworks/base/services/java/corri/android/serv ...
- 手把手带你搞懂AMS启动原理
彻底搞懂AMS即ActivityManagerService,看这一篇就够了 前言 最近那么多教学视频(特别是搞车载的)都在讲AMS,可能这也跟要快速启动一个app(甚至是提高安卓系统启动速度有关), ...
- Activity启动流程和启动模式源码解析
Acticity启动流程 1.根启动的流程:从桌面点击图标,到启动Activity的页面 Activity启动之前 init进程->Zygote进程->SystemService进程和La ...
- android运行过程简书,Android系统的启动流程
Android系统有哪些进程 在Linux系统启动时,会读取init.rc,里面配置了一些需要启动的进程.注意:SystemServer进程不在init.rc里,因为SystemServer进程是由z ...
- Android 10.0 系统服务之ActivityMnagerService-AMS启动流程-[Android取经之路]
摘要:上一节我们讲完了SystemServer的启动过程,这一节接着上一节的步骤,来讲解ActivityManagerService的启动过程. ActivityManagerService简称AMS ...
- 【Android 插件化】Hook 插件化框架总结 ( 插件包管理 | Hook Activity 启动流程 | Hook 插件包资源加载 ) ★★★
Android 插件化系列文章目录 [Android 插件化]插件化简介 ( 组件化与插件化 ) [Android 插件化]插件化原理 ( JVM 内存数据 | 类加载流程 ) [Android 插件 ...
- 【Android 插件化】Hook 插件化框架 ( Hook Activity 启动流程 | 主线程创建 Activity 实例之前使用插件 Activity 类替换占位的组件 )
Android 插件化系列文章目录 [Android 插件化]插件化简介 ( 组件化与插件化 ) [Android 插件化]插件化原理 ( JVM 内存数据 | 类加载流程 ) [Android 插件 ...
- Android4.4 framework分析——ActivityManagerService的启动和对Activity的管理
本文主要介绍android4.4中ActivityManagerService的启动和ActivityManagerService对Activity堆栈的管理. 一.ActivityManagerSe ...
最新文章
- 关于微信 setData 回调函数中的坑
- Python处理mat文件的三种方式
- ubuntu建站遇到的mysql数据库问题
- mysql 魔术设置_详解php魔术方法(Magic methods)的使用方法
- Vagrant 构建 Linux 开发环境
- 修改MYSQL最大连接数的3种方法
- Android 性能优化---(8)APP启动时间优化指南
- GPT Plus Money!B O O M
- dbMigration .NET 数据同步迁移工具
- ijkplayer框架详解
- 2d游戏中关于碰撞以及渲染层级关系
- linux ftp配置和使用
- 2019寒假专题一 L CodeForces - 1260B
- request.getParameter();的作用
- python运用在大数据_python 大数据 应用场景
- 使用 arxiv-sanity 实时跟进自己研究领域的Paper
- 沪铅上市十周年 “铅华”与本色尽显
- 徐翰文-ArcGIS学习
- 【Java Swing探索之路系列】之二:Java Swing布局面板组件
- c语言常量2l是什么,2017年计算机二级c语言题库
热门文章
- 理解ASP.NET中的三层结构
- 用VC写Assembly代码(7)--在Visual C++中使用内联汇编
- 现在人人都要准备的2020年六个事关职业生涯的技术趋势
- 为什么程序员的社会地位不高?
- 这可能是现实版程序员!
- 我是不会运行你的代码吗?不,我是不会导入自己的数据!
- 基因组中的趣事(二)- 最长的基因2.7 million,最短的基因只有8 nt却能编码
- 多功能mac代码编辑神器coderunner 4 比Xcode都强大
- P3954 [NOIP2017 普及组] 成绩(python3实现)
- android sp wp实例,android sp wp详解