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顾名思义,就是运行程序的信息,存储的字段自然是进程相关的信息,process——进程名,pid——进程pid,uid——进程uid,pkgList——该进程下的所有包。
- RunningServiceInfo
RunningServiceInfo与RunningAppProcessInfo类似,用于封装运行的服务信息,在它里面同样包含了一些服务进程的信息,同时还有一些其他信息,同时还有一些其他信息。activeSince——第一次被激活的时间、方式,foregroup——服务是否在后台执行。
下面同样是通过一个例子来看看如何使用ActivityManager,与在PackageManager中一样,封装一个Bean来保存我们需要的信息字段,代码如下所示。
package test.chenj.study_chapter7_7;
/**
* Created by 72312 on 2018/1/5.
*/
public class AmProcessInfo {
private String pid;
private String uid;
private String memorySize;
private String processName;
public AmProcessInfo() {
}
public String getPid() {
return pid;
}
public String getUid() {
return uid;
}
public String getMemorySize() {
return memorySize;
}
public String getProcessName() {
return processName;
}
public void setPid(String pid) {
this.pid = pid;
}
public void setUid(String uid) {
this.uid = uid;
}
public void setMemorySize(String memorySize) {
this.memorySize = memorySize;
}
public void setProcessName(String processName) {
this.processName = processName;
}
}
接下来,可以通过调用getRunningAppProcess方法,返回当前运行的进程信息,并将我们关心的信息保存到Bean中,代码如下所示。
private List<AmProcessInfo> getAmProcessList(){
List<AmProcessInfo> list = new ArrayList<>();
List<ActivityManager.RunningAppProcessInfo> amList = am.getRunningAppProcesses();
for (ActivityManager.RunningAppProcessInfo info : amList) {
AmProcessInfo amProcessInfo = new AmProcessInfo();
amProcessInfo.setPid("pid:" + info.pid);
amProcessInfo.setUid("uid:" + info.uid);
amProcessInfo.setProcessName("processName:" + info.processName);
int[] memoryPid = new int[]{info.pid};
Debug.MemoryInfo[] memoryInfos = am.getProcessMemoryInfo(memoryPid);
amProcessInfo.setMemorySize("memorySize:" + memoryInfos[0].getTotalPss());
list.add(amProcessInfo);
}
return list;
}
其中获取ActivityManager实体类通过以下方法取得。
am = (ActivityManager)getSystemService(context.ACTIVITY_SERVICE);
程序运行效果如图所示。
相关阅读
根据Google的报告,截止2017年5月为止,Android活跃用户已超过20亿,并还在持续增长中。Android系统在几个主要的市场上已超过了iOS系统
Android OpenGLES2.0(一)——了解OpenGLES2.0
原文链接:Android OpenGLES2.0(一)——了解OpenGLES2.0什么是OpenGL ES?OpenGL(全写Open Graphics Library)是指定义了一个跨编程语言、
最近Neo突发神经,想要将学过的一些计算机视觉、机器学习中的算法都放到移动设备上去跑跑,因为移
Android Surface、SurfaceView、SurfaceHolder及Sur
最近学习Google的zxing扫码,接触到Surface、Surface和Viewfindview,这里先记下Surface学习到的好东西 转载:http://blog.csdn.net/pa
GridView与ListView的用法基本一致,不同的只是布局。当我们打开手机,应用会以宫格显示,那就是GridView。 以代码形式展示给大家,适