Android Framework 框架系列之 ActivityManagerService

640?wx_fmt=gif

640?wx_fmt=gif

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

640?wx_fmt=jpeg

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

  1. AMS简单关系

  2. AMS 构造函数

  3. AMS 父类

  4. AMS 常用

  5. AMS部分方法实现

1. AMS简单关系

AMS 继承实现关系图

640?wx_fmt=jpeg

AMS 继承实现关系图

AMS代码路径\frameworks\base\services\core\java\com\android\server\ActivityManagerService.java

2.AMS 构造函数

AMS 构造函数思维导图

640?wx_fmt=png

AMS 构造函数思维导图 一

640?wx_fmt=png

AMS 构造函数思维导图 二

AMS 继承实现方法如下

640?wx_fmt=png

AMS 测试构造函数

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

640?wx_fmt=png

AMS 构造函数 一

640?wx_fmt=jpeg

AMS 构造函数 二

640?wx_fmt=jpeg

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 内部类实现

640?wx_fmt=jpeg

KillHandler 内部类实现

  • UiHandler 内部实现

640?wx_fmt=png

UiHandler 内部实现Crash ANR 等问题

640?wx_fmt=png

ensureBootCompleted

640?wx_fmt=png

finishBooting 方法

640?wx_fmt=png

enableScreenAfterBoot

640?wx_fmt=jpeg

enableScreenAfterBoot

640?wx_fmt=jpeg

hideBootMessagesLocked

  • 实现父类的一些方法

640?wx_fmt=png

实现父类接口中的一些方案

  • 判断是否是前台app的方法

640?wx_fmt=jpeg

isAppForeground

  • 多窗口 以及画中画模式

640?wx_fmt=png

多窗口 以及画中画模式

  • PROCESS INFO 接口服务类

640?wx_fmt=png

PROCESS INFO 接口服务类

  • PermissionController 接口类

640?wx_fmt=png

PermissionController

  • IntentFirewallInterface Intent防火墙 接口

640?wx_fmt=png

IntentFirewallInterface

  • checkCallingPermission 方法

640?wx_fmt=png

checkCallingPermission

  • findUriPermissionLocked 相关方法

640?wx_fmt=png

findUriPermissionLocked

  • getMemoryInfo 获取内存信息

640?wx_fmt=jpeg

getMemoryInfo

  • TASK MANAGEMENT 相关方法实现

640?wx_fmt=png

TASK MANAGEMENT 相关方法实现

  • createRecentTaskInfoFromTaskRecord 方法

640?wx_fmt=png

createRecentTaskInfoFromTaskRecord

  • getTaskSnapshot

640?wx_fmt=png

getTaskSnapshot

  • removeTasksByPackageNameLocked 方法

640?wx_fmt=jpeg

removeTasksByPackageNameLocked

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

640?wx_fmt=png

实现部分 kill 进程的方法

  • 实现 restart 方法

640?wx_fmt=png

实现 restart 方法

  • systemReady 方法

640?wx_fmt=png

systemReady 方法

  • handleApplicationCrash 相关方法实现

    640?wx_fmt=png

    handleApplicationCrash 相关方法实现

  • addErrorToDropBox

将Crash WTF ANR 信息导入到Drop box

640?wx_fmt=png

addErrorToDropBox

  • getProcessesInErrorState 状态信息

640?wx_fmt=png

getProcessesInErrorState

  • 获取正在运行的app 进程 getRunningAppProcesses

640?wx_fmt=png

getRunningAppProcesses

  • dump方法实现

640?wx_fmt=png

dump

  • dumpOomLocked

    640?wx_fmt=png

    image.png

640?wx_fmt=png

dumpActivity

  • cleanUpApplicationRecordLocked

640?wx_fmt=png

cleanUpApplicationRecordLocked

  • 实现 Service 相关方法

640?wx_fmt=png

Service 相关方法

640?wx_fmt=png

Service 相关方法

640?wx_fmt=png

Service 相关方法

  • BACKUP AND RESTORE

640?wx_fmt=png

BACKUP AND RESTORE

  • BROADCASTS 相关方法

640?wx_fmt=png

BROADCASTS

640?wx_fmt=png

BROADCASTS

640?wx_fmt=png

BROADCASTS

  • INSTRUMENTATION 仪表仪器相关

    640?wx_fmt=png

    INSTRUMENTATION

  • update Configuration更新相关

    640?wx_fmt=png

    updateConfiguration

  • computeOomAdjLocked

    640?wx_fmt=png

    computeOomAdjLocked

  • LocalService

640?wx_fmt=png

LocalService

  • waitForNetworkStateUpdate

640?wx_fmt=png

waitForNetworkStateUpdate

  • AppTaskImpl 接口类

640?wx_fmt=png

AppTaskImpl 接口类

至此

640?wx_fmt=jpeg

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

640?wx_fmt=jpeg

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

640?wx_fmt=other

既然都看到这里,领两个红包在走吧!以下两个红包每天都可以领取

1.支付宝搜索 522398497,或扫码支付宝红包海报。

支付宝扫一扫,每天领取大红包

2.微信红包,微信扫一扫即可领取红包

微信扫一扫,每天领取微信红包

小礼物走一走,来简书关注我

posted @ 2018-12-10 10:44  程序员Android的博客  阅读(261)  评论(0编辑  收藏  举报