9.3 Android Apk应用信息获取之ActivityManager" class="reference-link">9.3 Android Apk应用信息获取之ActivityManager
前面使用PackageManager获得了所有的应用包信息,但哼哈二将中还有一员大将没说到,那就是——ActivityManager,它的功能丝毫不逊色于PackageManager。事实上,它们在使用上各有侧重点,PackageManager重点在于获得应用的包信息,而ActivityManager重点在与获得在运行的应用程序信息。
同PackageManager一样,ActivityManager也封装了不少Bean对象,下面选几个比较重要的来看看。
第一个是内存信息:
- ActivityManager.MemoryInfo
MemoryInfo有几个非常重要的字段:availMem——系统可用内存,totalMem——总内存,threshold——低内存的阈值,即区分是否低内存的临界值,lowMemory——是否处于低内存。
- Debug.MemoryInfo
事实上,Android中还有一个MemoryInfo,它来自Debug.MemoryInfo,前面看的ActivityManager. MemoryInfo通常用于获取全局的内存使用信息,而Debug.MemoryInfo用于统计进程下的内存信息。
- RunningAppProcessInfo
RunningAppProcessInfo顾名思义,就是运行进程的信息,存储的字段自然是进程相关的信息,processName——进程名,pid——进程pid,uid——进程uid,pkgList——该进程下的所有包。
- RunningServiceInfo
RunningServiceInfo与RunningAppProcessInfo类似,用于封装运行的服务信息,在它里面同样包含了一些服务进程的信息,同时还有一些其他信息。activeSince——第一次被激活的时间、方式,foreground——服务是否在后台执行。
下面同样是通过一个例子来看看如何使用ActivityManager,与在PackageManager中一样,封装一个Bean来保存我们需要的信息字段,代码如下所示。
- package com.imooc.systemtest;
- public class AMProcessInfo {
- private String pid;
- private String uid;
- private String memorySize;
- private String processName;
- public AMProcessInfo() {
- }
- public String getPid() {
- return pid;
- }
- public void setPid(String pid) {
- this.pid = pid;
- }
- public String getUid() {
- return uid;
- }
- public void setUid(String uid) {
- this.uid = uid;
- }
- public String getMemorySize() {
- return memorySize;
- }
- public void setMemorySize(String memorySize) {
- this.memorySize = memorySize;
- }
- public String getProcessName() {
- return processName;
- }
- public void setProcessName(String processName) {
- this.processName = processName;
- }
- }
接下来,可以通过调用getRunningAppProcesses方法,返回当前运行的进程信息,并将我们关心的信息保存到Bean中,代码如下所示。
- private List<AMProcessInfo> getRunningProcessInfo() {
- mAmProcessInfoList = new ArrayList<AMProcessInfo>();
- List<ActivityManager.RunningAppProcessInfo> appProcessList =
- mActivityManager.getRunningAppProcesses();
- for (int i = 0; i < appProcessList.size(); i++) {
- ActivityManager.RunningAppProcessInfo info = appProcessList.get(i);
- int pid = info.pid;
- int uid = info.uid;
- String processName = info.processName;
- int[] memoryPid = new int[]{pid};
- Debug.MemoryInfo[] memoryInfo = mActivityManager. getProcessMemoryInfo(memoryPid);
- int memorySize = memoryInfo[0].getTotalPss();
- AMProcessInfo processInfo = new AMProcessInfo();
- processInfo.setPid("" + pid);
- processInfo.setUid("" + uid);
- processInfo.setMemorySize("" + memorySize);
- processInfo.setProcessName(processName);
- mAmProcessInfoList.add(processInfo);
- }
- return mAmProcessInfoList;
- }
程序运行效果如图9.8所示。
图9.8 ActivityManager
