ActivityManagerService
先上类图:

基本类说明和运行框架
图中蓝色表示AMS进程,黄色表示app进程。
1. 全局调度者
在android中,AMS是activity和进程的全局调度者,也就是说系统中载入和准备载入的activity在AMS中
都有记录-ActivityRecord实例。AMS里有多个任务栈-ActivityStack(通过ActivityStackSupervior管理),用来分组管理这些ActivityRecord。AMS的调度机制和任务管理较为复杂,需要进一步单独分析。
2. 本地管理者
Activity运行在所属app进程中, 每个进程的主线程是ActivityThread,ActivityThread是对Activity调度的执行者。在这个类中,有一个activity的本地记录mActivities,记录的是进程中所有的activity信息。
3. 消息传递者
ActivityThread执行来自于AMS的命令,而中间传递命令的是ApplicationThread。 ApplicationThread是一个Binder实体类,同时实现了接口IApplicationThread。 此类通过IPC通信,接收来自AMS的消息,然后打包发送给ActivityThread里的mH handler处理, mH handler再通过performXXXAcitivity()函数调用Activity类中的perfromXXX()函数来执行生命周期函数。
ApplicationThreadProxy是ActivityThread的代理类,用来被AMS调用,与ApplicationThread进行IPC通信。
AMS的proxy类是ActivityManagerProxy,用于App或者其他service端调用来使用AMS的功能,如startActivity,startService等。
ActivityManagerService的更多相关文章
- ActivityManagerService是如何启动app
ActivityManagerService是如何启动app 一. 上一篇文章app的启动过程,说明了launcher启动app是通过binber,让ActivityManagerServi ...
- 开机SystemServer到ActivityManagerService启动过程分析
开机SystemServer到ActivityManagerService启动过程 一 从Systemserver到AMS zygote-> systemserver:java入层口: /** ...
- Android ActivityManagerService 基本构架详解
学习AmS有段时日了,总结下,也好梳理一下自己的思路.小兵一个,有些地方理解不对,大家可以互相讨论,交流才有进步吗~~~ AmS可以说是Android上层系统最核心的模块之一,其主要完成管理应用进程的 ...
- Android 7.1 ActivityManagerService 屏幕旋转流程分析 (四)
四.Activity的更新(旋转) sendNewConfiguration()会调用到ActivityManagerService的updateConfiguration()来update Conf ...
- ActivityManagerService启动过程分析
之前讲Android的View的绘制原理和流程的时候,讲到过在Android调用setContentView之后,Android调用了一个prepreTravle的方法,这里面就提到了Activity ...
- 理解ActivityManagerService
--摘自<Android进阶解密> *AMS家族* 1.Android 7.0的AMS家族 2.AMP和AMS进行通信 3.(Android 7.0)AMP是AMN的内部类,它们都实现了I ...
- Android解析ActivityManagerService(一)AMS启动流程和AMS家族
前言 此前在Android系统启动流程.应用进程以及深入四大组件这三个系列文章中,都提及到了AMS,但都没有系统的来讲解它,本文就以AMS为主来进行讲解,其中会有一些知识点与这些系列文章有所重合,这里 ...
- Android系统服务(一)解析ActivityManagerService(AMS)
相关文章 Android系统启动流程系列 Android应用进程系列 Android深入四大组件系列 前言 此前在Android系统启动流程.应用进程以及深入四大组件这三个系列文章中,都提及到了AMS ...
- ActivityManagerService数据结构Activity栈管理(二)
ActivityManagerService要管理四大组件,那四大组件就必须在AMS中有存在的形式,这里先从AMS 如何管理Activity 谈起: Activity在AMS 中存在的形式为Activ ...
- Android解析ActivityManagerService(二)ActivityTask和Activity栈管理
前言 关于AMS,原计划是只写一篇文章来介绍,但是AMS功能繁多,一篇文章的篇幅远远不够.这一篇我们接着来学习与AMS相关的ActivityTask和Activity栈管理. 1.ActivitySt ...
随机推荐
- 使用em为单位制作两列弹性布局
一.DIV布局按照定位的方法分为:浮动方法(float),坐标定位方法(position),还有就是两者相结合的方法. 二.DIV布局按照定义单位的不同可分为:固定宽度布局.流体布局.弹性布局和混合布 ...
- Mysql指定部分数据同步
一.需求背景 朋友的公司需要每天定时从源端定时同步一部分数据到目标端,库中存在company_id列的表,只将指定的company_id列导入到目标端数据库:存在company_id列的表,将表中所有 ...
- Redis学习03——存储字符串(String)
--------------------- 作者:愤怒的小明 来源:CSDN 原文:https://blog.csdn.net/qiwenmingshiwo/article/details/78118 ...
- map 的使用 UVA156
借用这一水题来熟悉map的操作,以前以为看过c++ primer,对map虽然不熟悉但用还是会用的,实际上手发现不是那么回事,还是有很多坑的 #include <iostream> #in ...
- 理解 Python 语言中的 defaultdict
众所周知,在Python中如果访问字典中不存在的键,会引发KeyError异常(JavaScript中如果对象中不存在某个属性,则返回undefined).但是有时候,字典中的每个键都存在默认值是非常 ...
- mac 将本地文件上传到vps
打开mac终端 假设通过ssh连接远程vps命令为. ssh root@194.10.10.23 -p92322 (说明:92322表示端口号,一般vps端口号默认是22) 那么复制本地文件到终端的命 ...
- spring boot指定外部配置的坑
外部配置文件所在目录path/to/dir 指定--spring.config.location=path/to/dir 项目启动,没有使用任何配置文件,项目外和jar包中的都没有使用 这是因为其把p ...
- 从默认的index.jsp页面跳转或转发到其他页面
使用forward还是redirect都可以完成跳转 forward:浏览器地址不变,所以存在重复提交的问题 <% pageContext.forward("student/list ...
- Linux下根目录root扩容
参考博客:https://blog.csdn.net/qq_36527339/article/details/81772996 1.首先虚拟机关机 —> 选中要扩容的虚拟机 —>编辑虚拟机 ...
- 1.1Jupyter notbook 的使用
目录 目录 (一)安装Jupyter notebook 1.在控制台输入: 2.注意: 3.安装的过程: (二)启动Jupyter notebook (三)文件管理 (四)基本概念与操作 1.什么是C ...