zoukankan      html  css  js  c++  java
  • ActivityManagerService

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

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

    1. AMS简单关系
    2. AMS 构造函数
    3. AMS 父类
    4. AMS 常用
    5. AMS部分方法实现

    1. AMS简单关系

    AMS 继承实现关系图

    AMS 继承实现关系图

    AMS代码路径
    frameworksaseservicescorejavacomandroidserverActivityManagerService.java

    2.AMS 构造函数

    AMS 构造函数思维导图

    AMS 构造函数思维导图 一

    AMS 构造函数思维导图 二

    AMS 继承实现方法如下

    AMS 测试构造函数

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

    AMS 构造函数 一
    AMS 构造函数 二

    AMS构造函数 三

    3. AMS 父类 IActivityManager.Stub

    ActivityMangerService 父类是由frameworksasecorejavaandroidappIActivityManager.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 接口类

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

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

  • 相关阅读:
    oracle 增加列
    20120621 myeclipse 远程调试
    plsql 参数中in out in的区别讲解
    20120606 随笔
    MYSQL申明变量&显示变量
    arcgis for flex 地图发布服务
    arcserver 地图发布过程
    arcserver 发布地图后浏览器不更新问题
    把一个表的一列插入另一个表的空字段
    mysql运行语句时出现 FUNCTION *** does not exist
  • 原文地址:https://www.cnblogs.com/wangjie1990/p/11327493.html
Copyright © 2011-2022 走看看