ActivityManagerService浅析


极力推荐Android 开发大总结文章:欢迎收藏
程序员Android 力荐 ,Android 开发者需要的必备技能

本篇文章主要介绍 Android
开发中的 AMS部分知识点,通过阅读本篇文章,您将收获以下内容:
- AMS简单关系
- AMS 构造函数
- AMS 父类
- AMS 常用
- AMS部分方法实现
欢迎关注微信公众号:程序员Android
公众号ID:ProgramAndroid
获取更多信息

微信公众号:ProgramAndroid
我们不是牛逼的程序员,我们只是程序开发中的垫脚石。
我们不发送红包,我们只是红包的搬运工。
1. AMS简单关系
AMS 继承实现关系图

AMS 继承实现关系图
AMS代码路径\frameworks\base\services\core\java\com\android\server\ActivityManagerService.java
2.AMS 构造函数
AMS 构造函数思维导图

AMS 构造函数思维导图 一

AMS 构造函数思维导图 二
AMS 继承实现方法如下

AMS 测试构造函数
AMS 构造方法是在主线程上调用,但可能需要附加各种处理程序到其他线程,因此要注意区分Looper

AMS 构造函数 一

AMS 构造函数 二

AMS构造函数 三
3. AMS 父类 IActivityManager.Stub
ActivityMangerService 父类是由frameworks\base\core\java\android\app\IActivityManager.aidl
文件生成,可以实现跨进程通讯。此类同提供多种接口方法,共不同的进程调用。
4. AMS 常用变量
-
- 控制CPU 电池检测时间
/** Control over CPU and battery monitoring */
// write battery stats every 30 minutes.
static final long BATTERY_STATS_TIME = 30 * 60 * 1000;
// don't sample cpu less than every 5 seconds.
static final long MONITOR_CPU_MIN_TIME = 5 * 1000;
/** Control over CPU and battery monitoring */
// write battery stats every 30 minutes.
static final long BATTERY_STATS_TIME = 30 * 60 * 1000;
// don't sample cpu less than every 5 seconds.
static final long MONITOR_CPU_MIN_TIME = 5 * 1000;
-
- 广播超时,事件分发超时,网络连接超时 时间
// How long we allow a receiver to run before giving up on it.
static final int BROADCAST_FG_TIMEOUT = 10*1000;
static final int BROADCAST_BG_TIMEOUT = 60*1000;
// How long we wait until we timeout on key dispatching.
static final int KEY_DISPATCHING_TIMEOUT = 5*1000;
/**
* Default value for {@link Settings.Global#NETWORK_ACCESS_TIMEOUT_MS}.
*/
private static final long NETWORK_ACCESS_TIMEOUT_DEFAULT_MS = 200; // 0.2 sec
// How long we allow a receiver to run before giving up on it.
static final int BROADCAST_FG_TIMEOUT = 10*1000;
static final int BROADCAST_BG_TIMEOUT = 60*1000;
// How long we wait until we timeout on key dispatching.
static final int KEY_DISPATCHING_TIMEOUT = 5*1000;
/**
* Default value for {@link Settings.Global#NETWORK_ACCESS_TIMEOUT_MS}.
*/
private static final long NETWORK_ACCESS_TIMEOUT_DEFAULT_MS = 200; // 0.2 sec
5. AMS 部分方法实现
- KillHandler 内部类实现

KillHandler 内部类实现
- UiHandler 内部实现

UiHandler 内部实现Crash ANR 等问题

ensureBootCompleted

finishBooting 方法

enableScreenAfterBoot

enableScreenAfterBoot

hideBootMessagesLocked
- 实现父类的一些方法

实现父类接口中的一些方案
- 判断是否是前台app的方法

isAppForeground
- 多窗口 以及画中画模式

多窗口 以及画中画模式
- PROCESS INFO 接口服务类

PROCESS INFO 接口服务类
- PermissionController 接口类

PermissionController
- IntentFirewallInterface Intent防火墙 接口

IntentFirewallInterface
- checkCallingPermission 方法

checkCallingPermission
- findUriPermissionLocked 相关方法

findUriPermissionLocked
- getMemoryInfo 获取内存信息

getMemoryInfo
- TASK MANAGEMENT 相关方法实现

TASK MANAGEMENT 相关方法实现
- createRecentTaskInfoFromTaskRecord 方法

createRecentTaskInfoFromTaskRecord
- getTaskSnapshot

getTaskSnapshot
- removeTasksByPackageNameLocked 方法

removeTasksByPackageNameLocked
- 实现部分 kill 进程的方法 killProcessesBelowForeground killUid

实现部分 kill 进程的方法
- 实现 restart 方法

实现 restart 方法
- systemReady 方法

systemReady 方法
handleApplicationCrash 相关方法实现

handleApplicationCrash 相关方法实现
addErrorToDropBox
将Crash WTF ANR 信息导入到Drop box

addErrorToDropBox
- getProcessesInErrorState 状态信息

getProcessesInErrorState
- 获取正在运行的app 进程 getRunningAppProcesses

getRunningAppProcesses
- dump方法实现

dump
dumpOomLocked

image.png

dumpActivity
- cleanUpApplicationRecordLocked

cleanUpApplicationRecordLocked
- 实现 Service 相关方法
1.getServices
2.getRunningServiceControlPanel
3.startService
4.stopService
5.peekService
6.stopServiceToken
7.setServiceForeground
8.bindService
9.unbindService
10.publishService
11.unbindFinished
12.serviceDoneExecuting

Service 相关方法

Service 相关方法

Service 相关方法
- BACKUP AND RESTORE

BACKUP AND RESTORE
- BROADCASTS 相关方法

BROADCASTS

BROADCASTS

BROADCASTS
INSTRUMENTATION 仪表仪器相关

INSTRUMENTATION
update Configuration更新相关

updateConfiguration
computeOomAdjLocked

computeOomAdjLocked
LocalService

LocalService
- waitForNetworkStateUpdate

waitForNetworkStateUpdate
- AppTaskImpl 接口类

AppTaskImpl 接口类


至此,本篇已结束,如有不对的地方,欢迎您的建议与指正。同时期待您的关注,感谢您的阅读,谢谢!

如有侵权,请联系小编,小编对此深感抱歉,届时小编会删除文章,立即停止侵权行为,请您多多包涵。

既然都看到这里,领两个红包在走吧!
以下两个红包每天都可以领取
1.支付宝搜索 522398497,或扫码支付宝红包海报。

支付宝扫一扫,每天领取大红包
2.微信红包,微信扫一扫即可领取红包

微信扫一扫,每天领取微信红包
小礼物走一走,来简书关注我
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!