Android开发涉及到的AMS类和ActivityThread类源码解读
时间:2021-07-19
本文章向大家介绍Android开发涉及到的AMS类和ActivityThread类源码解读,主要包括Android开发涉及到的AMS类和ActivityThread类源码解读使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
Android开发系统启动流程涉及到的AMS类和ActivityThread类
ZygoteInit
- public static void main(String argv[]) {}
- forkSystemServer() //fork系统进程
- mMethod.invoke(null, new Object[] { mArgs });//反射调用系统进程的那个ActivityThread类systemMain方法
public static ActivityThread systemMain() { //系统的
ActivityThread thread = new ActivityThread();
thread.attach(true, 0);
return thread;
}
//如果不是系统的ActivityThread,还是调用Looper.loop();进入死循环,也就是为什么我们app不会退出的原因
ActivityThread extends ClientTransactionHandler
public static void main(String[] args) { //普通
ActivityThread thread = new ActivityThread();
thread.attach(false, startSeq);
Looper.loop();
}
//将mAppThread传递给AMS系统进程
ActivityThread.attach(boolean system, long startSeq)//systemMain方法的对应为true
- mgr.attachApplication(mAppThread, startSeq);
//首先搞清楚,是一部Android设备系统只有一个AMS进程,并不是每个应用有一个AMS进程
//一个app应用都有一个主进程ActivityThread实例,AMS通过ProcessList mProcessList持有每个应用的进程记录ProcessRecord
//ProcessRecord进而持有ApplicationThread代理,ApplicationThread通过H:Handler与ActivityThread通信
//从main进程切换到AMS进程
ActivityManager.getService()
//从AMS进程切换到main进程,通过ApplicationThread,在通过H:Handler与ActivityThread通信
IApplicationThread mAppThread
//App启动后反射调用ActivityThread的main方法入口,然后调用attach方法,将IApplicationThread传递给AMS
//ActivityThread类的ApplicationThread干嘛的知道了吧?就是IApplicationThread的代理类,用于和其他进程比如AMS通信的
//1.ActivityThread
private void attach(boolean system, long startSeq) {
final IActivityManager mgr = ActivityManager.getService();
mgr.attachApplication(mAppThread, startSeq);
}
//2.ActivityManagerService()
final ActivityThread mSystemThread; //系统进程,和AMS同一个进程的ActivityThread
final ProcessList mProcessList; //其他进程的进程列表,管理每个进程
private boolean attachApplicationLocked(IApplicationThread thread){
ProcessRecord app;
generateApplicationProvidersLocked()//通过PMS获取xml注册的ContentProvider组件
thread.bindApplication(processName, appInfo, providerList,...)//将providerList传递给主进程
app.makeActive(thread, mProcessStats); //持有thread:ApplicationThread
mProcessList.updateLruProcessLocked(app, false, null); //更新进程LRU列表
}
//每个应用的Application创建的时机:
//启动Activity的参数ActivityClientRecord r持有packageInfo:LoadedApk持有Application mApplication
//makeApplication方法判断有Application对象直接返回,没有就创建一个
//ActivityThread
private Activity performLaunchActivity(ActivityClientRecord r, Intent customIntent) {
Application app = r.packageInfo.makeApplication(false, mInstrumentation);
}
Context的实现类是ContextImpl
原文地址:https://www.cnblogs.com/yongfengnice/p/15029633.html
- 了解ASP.NET MVC几种ActionResult的本质:FileResult
- ASP.NET Core管道深度剖析(1):采用管道处理HTTP请求
- 如何用Python和深度神经网络识别图像?
- 余军:分布式数据库在金融行业的创新实践
- 微信小游戏采用了我们都忽略的产品推广新切入点
- ASP.NET MVC下的四种验证编程方式[续篇]
- 如何把业务问题变成机器学习的问题?
- 这算是ASP.NET MVC的一个大BUG吗?
- 【Scikit-Learn 中文文档】分解成分中的信号(矩阵分解问题) - 无监督学习 - 用户指南 | ApacheCN
- 区块链技术在非能源领域的应用场景
- Python读书笔记8
- How to debug .NET Core RC2 app with Visual Studio Code on Windows?
- 难道.NET Core到R2连中文编码都不支持吗?
- .NET Core RC2发布在即,我们试着用记事本编写一个ASP.NET Core RC2 MVC程序
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 贷款违约预测-Task1 赛题理解
- Android功耗优化(7)---如何分析wakelock(wakeup source)持锁问题
- 一道有意思的腾讯算法面试题
- 关于 JavaScript 错误处理的最完整指南(上半部)
- 排障集锦:九九八十一难之第十六难!-------------enoent ENOENT: no such file or directory, open ‘/root/package.json‘
- 大点干!早点散----------深入剖析GFS分布式文件系统
- 大点干!早点散----------ELK企业日志分析系统理论+实战!
- 面试题系列第8篇:谈谈String、StringBuffer、StringBuilder的区别?
- HTTP协议的请求与数据抓包
- Ubuntu 18.04 LTS 通过 Netplan 配置网络教程
- 【kafka源码】kafka内部的一些术语
- TKE使用自建NFS持久化存储
- 网站 SSL 检测 PCI DSS 不合规解决办法
- leetcode链表之分割链表
- 五分钟带你读懂 TCP全连接队列(图文并茂)