Android开发之获取当前进程的信息的集合
Android开发对于大家来说越来越接近。我们不用只局限于使用别人开发的应用。
在开发部分手机卫士等类型的app时,肯定要获取到当前所有运行的进程 。并且区分是系统进程还是用户进程,并且获取应用的信息。
思路:
1、通过ActivityManager.getRunningAppProcesses()获取正在运行的进程
2、得到应用的ApplicationInfo
3、if((applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == ApplicationInfo.FLAG_SYSTEM) 显示系统应用
代码实现:
进程的实体类如下:
public class ProcessInfo {
public String name; //进程的名字
public Drawable icon; //进程的图标
public String packName; //进程的包名
public boolean isSystem; //是否为系统应用
public long size; //进程的占用的内存
}
获取系统进程的集合的方法如下:
public static List<ProcessInfo> getProcessInfo(Context ctx){
//获取进程相关信息
List<ProcessInfo> processInfoList = new ArrayList<ProcessInfo>();
//1,activityManager管理者对象和PackageManager管理者对象
ActivityManager am = (ActivityManager) ctx.getSystemService(Context.ACTIVITY_SERVICE);
PackageManager pm = ctx.getPackageManager();
//2,获取正在运行的进程的集合
List<RunningAppProcessInfo> runningAppProcesses = am.getRunningAppProcesses();
//3,循环遍历上诉集合,获取进程相关信息(名称,包名,图标,使用内存大小,是否为系统进程(状态机))
for (RunningAppProcessInfo info : runningAppProcesses) {
ProcessInfo processInfo = new ProcessInfo();
//4,获取进程的名称 == 应用的包名
processInfo.packageName = info.processName;
//5,获取进程占用的内存大小(传递一个进程对应的pid数组)
android.os.Debug.MemoryInfo[] processMemoryInfo = am.getProcessMemoryInfo(new int[]{info.pid});
//6,返回数组中索引位置为0的对象,为当前进程的内存信息的对象
android.os.Debug.MemoryInfo memoryInfo = processMemoryInfo[0];
//7,获取已使用的大小
processInfo.memSize = memoryInfo.getTotalPrivateDirty()*1024;
try {
ApplicationInfo applicationInfo = pm.getApplicationInfo(processInfo.packageName, 0);
//8,获取应用的名称
processInfo.name = applicationInfo.loadLabel(pm).toString();
//9,获取应用的图标
processInfo.icon = applicationInfo.loadIcon(pm);
//10,判断是否为系统进程
if((applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == ApplicationInfo.FLAG_SYSTEM){
processInfo.isSystem = true;
}else{
processInfo.isSystem = false;
}
} catch (NameNotFoundException e) {
//需要处理
processInfo.name = info.processName;
processInfo.icon = ctx.getResources().getDrawable(R.drawable.ic_launcher);
processInfo.isSystem = true;
e.printStackTrace();
}
processInfoList.add(processInfo);
}
return processInfoList;
}
开始写个人博客,有些地方做的不对希望大家见谅,有什么不理解可以提问。谢谢大家观看,你们的认可才是我编写的动力。