AmS内部原理(android内核学习记录)

1、android整体架构图

《AmS内部原理(android内核学习记录)》
Ams是位于Framework中的服务段。
ActivityManagerService简称AmS,是android内核三大功能之一,另外两个是WindowManagerService和view。

2、AmS提供的主要功能。

《AmS内部原理(android内核学习记录)》
1、统一调试应用程序的Activity。应用程序要运行Activity,首先会报告给AmS,然后由AmS决定该Activity是否启动。

2、内存管理。Android官方声称,Activity退出后,其所有的进程并不会被立即杀死,从而在下次启动的时候,提高Activity的启动速度。这些Activity只有在内存吃紧的时候,才会被自动杀死。

3、进程管理。AmS向外提供了查询系统正在运行的进程API。

3、AmS中一些重要调度的相关变量

1、MAX_ACTIVITIES:最多保存的activity

static final int MAX_ACTIVITIES=20;

系统只有一个Activity处于执行状态,对于非执行状态的Activity,AmS会在内部暂时缓存起来,而不是立即杀死。但是,如果后台的Activity的数据过多,则会强制杀死一些优先级比较低的Activity。

2、MAX_RECENT_TASKS:记录的Activity

static final int MAX_RECENT_TASKS=20;

AmS会记录最近启动的20个Activity,超过该常量后则舍弃最早记录的Activity。

3、PAUSE_TIMEOUT:等待超时设置。

static final int PAUSE_TIMEOUT=500;

AmS通知应用进程暂停指定的Activity,AmS的忍耐是有限的,只有500毫秒。如果应用进程在该常量时间内还同有停止,AmS就是强制暂停关闭该Activity。这就是为什么应用程序设计时,不能在onPause()不能做过多事情的原因。

4、startActivity的流程

程序员可能经常使用startActivity启动指定的Activity。在我们调用这个方法时,其实底层做多了许多工作。
《AmS内部原理(android内核学习记录)》

以点击A-B为例:
点击A时,当AmS收到客户请求startActivity()后,会首先暂停当前的Activity,因此要判断mResumedActivity是否为空。在一般情况下,该值都不为空,如果不为空AmS会通知所在客户端暂停,执行该Activity并返回。
当A进程完成暂停后,报告AmS,这时AmS开始执行completePaused(),该方法中先要检查目标Activity是否在mHistory列表中,如果在,说明目标进程还在运行,目标Activity只是处于stop状态,还有没有finish,所以通知B进程直接resume指定的Activity即可。

5、AmS内存回收的潜规则

在android的官方文档中关于内存回收大致是这样描述的:系统按照以下优先级关闭进程以释放内存
1、前台进程,是指那些与用户操作的相关进程。具体包括:

  • 正在与用户交互的Activity
  • 包含一个Service,该Service正在服务于和用户交互的Activity。
  • 包含一个Service,该Service正在执行onCreate(),或者onStart(),onDestory()方法。
  • 包含一个BroadcastReceiver,正在执行onReceive()函数。

2、可视进程,尽管没有和用户交互,但可以影响到用户所看到的内容。

  • 一个位于Activity上的对话框
  • 一个Service

3、服务进程:凡是使用startService()所启动的服务其所有的进程都称为服务进程。

4、空进程:进程不包含任何componet,包括Activity,Service,Receiver对象,之所以保留这些进程的原因是为了减少重新创建进行需要的开销。

6、理解Activity

Activity本身只是一段程序代码而已,它所执行的内容没有任何的系统调用,客户端程序总是从ActivityThread开始执行。这个类已经创建了客户进程,然后人Activity所对应的Class文件中装载进来程序代码。实际上就是一个Activity类对象,然后继续执行该对象内部的各种代码,这些执行的代码不会创建线程。
Activity并不对应一个应用程序,ActivityThread才对应一个应用程序,所以Android允许同时运行多个应用程序,实际是是允许多个ActivityThread同时运行。

7、Activity生命期的代码含义

在过去的应用开发过程中,大多数人已经 了解Activity生命期中的主要几个状态,并知道如何在这些状态中做不同的事情。但可能还有一些疑惑,比如onStart()方法和onStop方法的真正差异在哪里。尽管你知道onStop代表Activity的停止,onStart代表Activity的开始。问题是开始和停止的差别又在哪里?
《AmS内部原理(android内核学习记录)》
具体在每个阶段的工作:
《AmS内部原理(android内核学习记录)》

    原文作者:PowerFromAndroid
    原文地址: https://blog.csdn.net/androidxiaogang/article/details/50890208
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞