ActivityManagerService浅析

作者: 程序员Android1 | 来源:发表于2018-06-06 10:54 被阅读40次

本篇文章主要介绍 Android 开发中的 AMS部分知识点,通过阅读本篇文章,您将收获以下内容:

  1. AMS简单关系
  2. AMS 构造函数
  3. AMS 父类
  4. AMS 常用
  5. 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 常用变量

    1. 控制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;
    1. 广播超时,事件分发超时,网络连接超时 时间
// 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 接口类

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

如有侵权,请联系小编,小编对此深感抱歉,同时小编会立即停止侵权行为。

​欢迎关注微信公众号:程序员Android
公众号ID:ProgramAndroid
获取更多信息

微信公众号:ProgramAndroid

我们不是牛逼的程序员,我们只是程序开发中的垫脚石。
我们不发送红包,我们只是红包的搬运工。

点击阅读原文,获取更多福利


相关文章

网友评论

    本文标题:ActivityManagerService浅析

    本文链接:https://www.haomeiwen.com/subject/xbqaqftx.html