73获取正在运行的进程的信息
2014-12-23 15:01
399 查看
获取正在运行的进程信息:包括进程的名字,进程和进程之间的区别(包名),图标,占用内存的大小,用户进程还是系统进程:
显示实体类:
方法也是通过ActivityManager的getRunningAppProcesses获得RunningAppProcessInfo的List集合,对这个集合做遍历:
RunningAppProcessInfo的processName就是包名;将进程的pid传入ActivityManager的getProcessMemoryInfo方法,得到MemoryInfo数组,通过getTotalPrivateDirty方法,得到进程占用手机内存的大小;
进程名和图标在applicationInfo这个节点下,判断是否是用户程序,只需要和ApplicationInfo.FLAG_SYSTEM做与运算就可以了,测试代码如下:
打印:
![](http://img.blog.csdn.net/20141223151153088?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2hlbmZ1ZHVvX2xvdmVpdA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
不过,也引发了一些错误:(提示NameNotFoundException)
![](http://img.blog.csdn.net/20141223151218173?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2hlbmZ1ZHVvX2xvdmVpdA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
这个System的error未解决。要是知道怎么解决的朋友指导下。(我想应该不是代码的问题)。
显示实体类:
package com.ustc.mobilemanager.domain; import android.graphics.drawable.Drawable; /** * 进程信息的业务bean * * @author * */ public class TaskInfo { private Drawable icon; private String name; private String packname; private long memSize;// 内存占用大小 private boolean userTask;// 用户进程(true)or系统进程(false) public Drawable getIcon() { return icon; } public void setIcon(Drawable icon) { this.icon = icon; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPackname() { return packname; } public void setPackname(String packname) { this.packname = packname; } public long getMemSize() { return memSize; } public void setMemSize(long memSize) { this.memSize = memSize; } public boolean isUserTask() { return userTask; } public void setUserTask(boolean userTask) { this.userTask = userTask; } @Override public String toString() { return "TaskInfo [icon=" + icon + ", name=" + name + ", packname=" + packname + ", memSize=" + memSize + ", userTask=" + userTask + "]"; } }业务类:
package com.ustc.mobilemanager.engine; import java.util.ArrayList; import java.util.List; import com.ustc.mobilemanager.R; import com.ustc.mobilemanager.domain.TaskInfo; import android.app.ActivityManager; import android.app.ActivityManager.RunningAppProcessInfo; import android.content.Context; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.graphics.drawable.Drawable; import android.os.Debug.MemoryInfo; /** * * 提供手机里面的进程信息 * * @author * */ public class TaskInfoProvider { /** * 获取所有的进程信息 * * @param context * @return */ public static List<TaskInfo> getTaskInfo(Context context) { ActivityManager am = (ActivityManager) context .getSystemService(Context.ACTIVITY_SERVICE); PackageManager pm = context.getPackageManager(); List<RunningAppProcessInfo> processInfos = am.getRunningAppProcesses(); List<TaskInfo> taskInfos = new ArrayList<TaskInfo>(); for (RunningAppProcessInfo processInfo : processInfos) { TaskInfo taskInfo = new TaskInfo(); // 进程名就是包名 String packname = processInfo.processName; taskInfo.setPackname(packname); // import android.os.Debug.MemoryInfo导包不能导错了 MemoryInfo[] memoryInfos = am .getProcessMemoryInfo(new int[] { processInfo.pid }); // 转成byte,方便转化 long memsize = memoryInfos[0].getTotalPrivateDirty() * 1024l; taskInfo.setMemSize(memsize); try { // PackageInfo packageInfo = pm.getPackageInfo(packname, 0); // packageInfo.applicationInfo ApplicationInfo applicationInfo = pm.getApplicationInfo( packname, 0); Drawable icon = applicationInfo.loadIcon(pm); taskInfo.setIcon(icon); String name = applicationInfo.loadLabel(pm).toString(); taskInfo.setName(name); if ((applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 0) { // 用户进程 taskInfo.setUserTask(true); } else { // 系统进程 taskInfo.setUserTask(false); } } catch (Exception e) { e.printStackTrace(); //系统内核进程 没有名称 taskInfo.setName(packname); taskInfo.setIcon(context.getResources().getDrawable(R.drawable.icon)); } taskInfos.add(taskInfo); } return taskInfos; } }
方法也是通过ActivityManager的getRunningAppProcesses获得RunningAppProcessInfo的List集合,对这个集合做遍历:
RunningAppProcessInfo的processName就是包名;将进程的pid传入ActivityManager的getProcessMemoryInfo方法,得到MemoryInfo数组,通过getTotalPrivateDirty方法,得到进程占用手机内存的大小;
package com.ustc.mobilemanager.engine; import java.util.ArrayList; import java.util.List; import com.ustc.mobilemanager.R; import com.ustc.mobilemanager.domain.TaskInfo; import android.app.ActivityManager; import android.app.ActivityManager.RunningAppProcessInfo; import android.content.Context; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.graphics.drawable.Drawable; import android.os.Debug.MemoryInfo; /** * * 提供手机里面的进程信息 * * @author * */ public class TaskInfoProvider { /** * 获取所有的进程信息 * * @param context * @return */ public static List<TaskInfo> getTaskInfo(Context context) { ActivityManager am = (ActivityManager) context .getSystemService(Context.ACTIVITY_SERVICE); PackageManager pm = context.getPackageManager(); List<RunningAppProcessInfo> processInfos = am.getRunningAppProcesses(); List<TaskInfo> taskInfos = new ArrayList<TaskInfo>(); for (RunningAppProcessInfo processInfo : processInfos) { TaskInfo taskInfo = new TaskInfo(); // 进程名就是包名 String packname = processInfo.processName; taskInfo.setPackname(packname); // import android.os.Debug.MemoryInfo导包不能导错了 MemoryInfo[] memoryInfos = am .getProcessMemoryInfo(new int[] { processInfo.pid }); // 转成byte,方便转化 long memsize = memoryInfos[0].getTotalPrivateDirty() * 1024l; taskInfo.setMemSize(memsize); try { // PackageInfo packageInfo = pm.getPackageInfo(packname, 0); // packageInfo.applicationInfo ApplicationInfo applicationInfo = pm.getApplicationInfo( packname, 0); Drawable icon = applicationInfo.loadIcon(pm); taskInfo.setIcon(icon); String name = applicationInfo.loadLabel(pm).toString(); taskInfo.setName(name); if ((applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 0) { // 用户进程 taskInfo.setUserTask(true); } else { // 系统进程 taskInfo.setUserTask(false); } } catch (Exception e) { e.printStackTrace(); //系统内核进程 没有名称 taskInfo.setName(packname); taskInfo.setIcon(context.getResources().getDrawable(R.drawable.icon)); } taskInfos.add(taskInfo); } return taskInfos; } }
进程名和图标在applicationInfo这个节点下,判断是否是用户程序,只需要和ApplicationInfo.FLAG_SYSTEM做与运算就可以了,测试代码如下:
package com.ustc.mobilemanager.test; import java.util.List; import com.ustc.mobilemanager.domain.TaskInfo; import com.ustc.mobilemanager.engine.TaskInfoProvider; import android.test.AndroidTestCase; public class TestTaskInfoProvider extends AndroidTestCase { public void testGetTaskInfo() throws Exception { List<TaskInfo> infos = TaskInfoProvider.getTaskInfo(getContext()); for (TaskInfo taskInfo : infos) { System.out.println(taskInfo.toString()); } } }
打印:
不过,也引发了一些错误:(提示NameNotFoundException)
这个System的error未解决。要是知道怎么解决的朋友指导下。(我想应该不是代码的问题)。
相关文章推荐
- 27、获取运行时信息(包括运行时的service、运行任务、正在运行的进程信息)
- Android:5.0以上获取系统正在运行的进程信息
- Android学习点点滴滴之获取正在运行的进程
- Android中TASK和PROCESS的区别,获取最近运行的程序和正在运行的进程
- 获取系统运行进程信息——PSAPI介绍使用
- Android -- 获取正在运行的service信息
- 在Android中获取系统正在运行的进程方法
- Android中TASK和PROCESS的区别,获取最近运行的程序和正在运行的进程
- WMI技术介绍和应用——查询正在运行的进程信息
- 如何获得JDK1.6上的jconsole启动时的正在运行的JAVA进程的一些信息
- 获取正在运行的activity的信息
- 获取Windows系统的进程运行信息
- 获取Windows系统的进程运行信息
- android获取正在运行的进程
- C#如何获取机器上正在运行的进程?
- delphi获取Windows系统的进程运行信息
- Android中TASK和PROCESS的区别,获取最近运行的程序和正在运行的进程
- 获取Windows系统的进程运行信息
- android获取正在运行的进程
- 获取正在系统运行的进程