在之前写过2篇关于ActivityManager的文章,如下所示。都是通过实战去了解里面的信息,现在感觉太繁琐,所以做一个api介绍比较详细。就像之前学习Telephony那样,对整体了解整个ActivityManager很有用。
Android中ActivityManager学习笔记(1)-MemoryInfo
Android中ActivityManager学习笔记(2)-RunningServiceInfo
android.app包,含有6个内部类:
先从ActivityManager API下手。
主activity中的
对于用户策动的活动,当前activity不会收到提示
将后面的任务立即移动到前面
提供一份不包含任何当前任务的列表,这些任务对于用户是不可见的
返回所有的任务
清楚用户数据
获取相应包名对应的apk的各种状态信息
获取设备配置信息
当一个应用程序在一个大的堆栈空间里运行时,估算当前设备中每一个应用内存片段的值
Lancher启动器的图标像素密度
启动器图标大小
当前设备每个应用的内存分类,就是内存的底线。低于这个值应用就会崩溃。
当前系统的内存信息
返回调用者进程的全局内存状态信息。
进程所使用的内存信息
当系统发生错误的时候,获取当前运行的一些进程的信息
当前设备运行着的应用进程信息
返回一个PendingIntent,该PendingIntent会启动一个控制面板,里面会显示当前系统运行的一系列服务。
当前运行的服务信息
当前系统运行的任务信息
是否是低内存的设备
判断设备是否运行在测试框架中
判断当前设备是否被Monkey乱点中
杀死对应包的后台进程
讲给定的id对应的任务移动到任务栈队列的最前面。
在API 8中已废除
Nested class
通过getMemoryInfo(ActivityManager.MemoryInfo)获得该对象,可以用来检索有效的内存信息
系统中的可见内存
系统判断自己是否处于低内存的情况
当内存太低,开始杀死后台服务和其他非外来的进程时,内存的临界值
内核中所有内存数
在发生错误时,检索内存中的有关信息
int CRASHED:奔溃
int NOT_RESPONDING:无回应
int NO_ERROR:0.状况码,无错误
public int condition:进程中的状态码
public byte[] crashData:(已经被弃用),空值
public String longMsg:一个表述错误状态的长信息
pubic int pid:进程id
pubic String processName:发生错误或奔溃的进程的进程名称
public String shortMsg:错误码的缩写
public String stackTrace:错误发生时的堆栈跟踪信息
public String tag:与错误有关的activity名
public int uid:用户id
用户最近访问和启动的任务信息
public Intent baseIntent:启动任务的原始Intent,可以用它重启任务或者将当前任务移动到任务列表的最前面
public CharSequence description:描述任务上次的状态
public int id:唯一标识当前运行的任务
public ComponentName origActivity:intent启动的实体控件
public int persistentId:任务的永久id号,不管该任务有没有运行
与正在运行的进程有关信息可以通过该类获得。
IMPORTANCE_BACKGROUND:importance变量的值之一。处于后台,但是仍然消耗资源的进程
IMPORTANCE_EMPT:importance变量的值之一。空进程
IMPORTANCE_FOREGROUND:importance变量的值之一。处于用户界面的进程。
IMPORTANCE_PERCEPTIBLE:同上。仍然运行着某些对用户有用的的东西
IMPORTANCE_SERVICE:同上。该进程包含仍在运行的服务
IMPORTANCE_VISIBLE:同上。运行某些对用户可见的东西,但不是立即显示在UI界面上,
REASON_PROVIDER_IN_USE:importanceReasonCode变量的值之一。应用的content provider中正被其他进程调用
REASON_SERVICE_IN_USE:同上。
REASON_UNKNOWN:同上。无特殊原因
public int importance:重要性等级
public int importanceReasonCode:重要原因code
public ComponentName importanceReasonComponent:到当前进程中使用的组件名
public int importanceReasonPid:进程客户端其他进程的进程id。
public int lastTrimLevel:报告给进程最后内存的等级
public int lru:近期最少使用算法,即为importance进行排序。
public int pid:进程id
public String[] pkgList:该进程加载的所有包名
public String processName:与当前对象相关的进程名称
public int uid:用户id
当前系统中运行的特殊服务
FLAG_FOREGROUND:前台进程
FLAG_PERSISTENT_PROCESS:持续进程
FLAG_STARTED:已启动
FLAG_SYSTEM_PROCESS:核心系统进程
public long activeSince:第一次启动的时间
public int clientCount:连接到该服务的客户端数量
public int clientLabel:客户端标签
public String clientPackage:客户端包名
public int crashCount:在服务运行过程中奔溃的次数
public int flags:运行标志
public boolean foreground:判断是否位于前端UI界面上
public long lastActivityTime:最后的活动时间
public int pid:进程id
public String process:服务所在的进程名
public long restarting:重新启动的时间,如果非空,代表该服务当前不在运行。等待一段时间后重启。
public ComponentName service:服务组件
public boolean started:是否已经启动
public int uid:用户id
当前在系统中运行的特定任务信息,这些任务不是意味着有进程活动的任务,而是简单的标识用户已经离开该任务,但是没有关闭,但是当前系统可能会杀死该进程,只支持它的状态,等用户返回后重新启动。
public ComponentName baseActivity:任务中第一次启动的activity.
public CharSquence description:任务当前状态的描述
public int id:任务id
public int numActivities:当前任务中活跃的activity数
public in numRunning:当前任务中运行的activity数(没有停止和持续的activity)
public Bitmap thumbnail:当前状态的缩略图
public ComponentName topActivity:任务历史栈最上层的activity.
总结
这一篇文章从ActivityManager讲起,逐渐讲解了其中的6个内部类,代表程序运行过程中所涉及到的各个进程、app、service、task的信息。对ActivityManager所管理的内容有了初步的了解。
前辈文章