zoukankan      html  css  js  c++  java
  • 理解ActivityManagerService

    --摘自《Android进阶解密》

    *AMS家族*

    1.Android 7.0的AMS家族

    2.AMP和AMS进行通信

    3.(Android 7.0)AMP是AMN的内部类,它们都实现了IActivityManager接口,这样它们就可以实现代理模式,具体来讲是远程代理:AMP和AMN是运行在两个进程中的,AMP是Client端AMN则是Server端,而Server端中具体的功能都是由AMN的子类AMS来实现的,因此,AMP就是AMS在Client端的代理类。AMN又实现了BInder类,这样AMP和AMS就可以通过Binder来进行进程间通信。ActivityManager通过AMN的getDefault方法得到AMP,通过AMP就可以和AMS进行通信

    4.Android 8.0AMS家族

    要实现进程间通信,服务端也就是AMS只需要继承IActivityManager.Stub类并实现相应的方法就可以了。采用AIDL后就不需要使用AMS的代理类AMP了,因此Android 8.0去掉了AMP,代替它的是IActivityManager,它是AMS在本地的代理。

    *AMS的启动过程*

    1.AMS的启动是在SystemServer进程中启动的

    2.SystemService的子类分为3中类型

      1)引导服务:ActivityManagerService、PowerManagerService、PackageManagerService

      2)核心服务:DropBoxManagerService、BatteryService、UsageStateService、WebViewUpdateService

      3)其他服务:CameraService、AlarmManagerService、VrManagerService

    3.AMS与应用程序进程的关系

      1)启动应用程序时AMS会检查这个应用程序需要的应用程序进程是否存在

      2)如果需要的应用程序进程不存在,AMS就会请求Zygote进程创建需要的应用程序进程

    *AMS重要的数据结构*

    ------------

    1.ActivityStack是一个管理类,用来管理系统所有的Activity,其内部维护了Activity的所有状态、特殊状态的Activity以及Activity相关的列表等数据。ActivityStack是由ActivityStackSupervisor来进行管理的

    2.ActivityStack维护了元素类型为TaskRecord的列表,这样ActivityStack和TaskRecord就有了关联,Activity任务栈存储在ActivityStack中

    *Activity任务栈模型*

    1.TaskRecord用来表示Activity的任务栈

    2.singleTop和singleTask时,该Activity的onNewIntent方法会被调用

    3.如果Launch Mode和FLAG设定的Activity启动方式有冲突,则以FLAG设定的为准

    *taskAffinity*

    1.在AndroidManifest.xml中设置android:taskAffinity,用来指定Activity希望归属的栈。

    2.如果allowTaskReparenting为true,说明Activity具有转移的能力

    欢迎关注我的微信公众号:安卓圈

  • 相关阅读:
    c# 动态调用.net编写的webservices接口
    Oracle序列(Sequence)创建、使用、修改、删除
    PLSQL Developer导入Excel数据
    asp.net MVC 过滤器使用案例:统一处理异常顺道精简代码
    PowerDesigner将PDM导出生成WORD文档
    JS魔法堂:再识instanceof
    Design Pattern: Not Just Mixin Pattern
    Design Pattern: Observer Pattern
    Architecture Pattern: Publish-subscribe Pattern
    ES6 Features系列:Template Strings & Tagged Template Strings
  • 原文地址:https://www.cnblogs.com/anni-qianqian/p/10181845.html
Copyright © 2011-2022 走看看