--摘自《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具有转移的能力

最新文章

  1. Dropzone.js实现文件拖拽上传
  2. 【干货分享】流程DEMO-借款申请
  3. October 25th Week 44th Tuesday 2016
  4. Microsoft Message Analyzer (微软消息分析器,“网络抓包工具 - Network Monitor”的替代品)官方正式版现已发布
  5. android加固系列—6.仿爱加密等第三方加固平台之动态加载dex防止apk被反编译
  6. 最近开始做Android了
  7. iOS 常用英语翻译
  8. [转载]使用HttpWebRequest进行请求时发生错误:基础连接已关闭,发送时发生错误处理
  9. 禁用iOS9 App Transport Security(ATS)特性时不起作用
  10. jquery判断对象是否获得焦点
  11. 让JAVA代码跑得更快
  12. 【Stage3D学习笔记续】山寨Starling(二):VertexData探幽
  13. JavaScript单例模式
  14. 使用KnockoutJs+Bootstrap实现分页
  15. 什么是HTML?HTML5是什么?HTML5有那些优势和特性?
  16. 区块链代币(Token)笔记 — — 术语
  17. ABP项目概述
  18. 搭建 consul 集群
  19. vue环境下安装npm,启动npm 修改js,css样式
  20. .NET并行计算和并发3.2-多线程调用Invoke

热门文章

  1. magento2 - Invalid credentials for 'https://repo.magento.com/packages.json', aborting.
  2. CentOS7配置iptables防火墙
  3. saltstack主机管理项目:编写插件基类-获取主机列表-提取yaml配置文件(四)
  4. linux中使用gdb调试程序
  5. Ubuntu操作用户账户
  6. [物理学与PDEs]第3章习题6 Lagrange 坐标下的一维理想磁流体力学方程组的数学结构
  7. Pandas时间处理的一些小方法
  8. vscode 正则表达式替换
  9. 版本控制工具 - TortoiseSVN
  10. MySql存储过程及函数