73获取正在运行的进程的信息
来源:互联网 发布:过程流程图软件 编辑:程序博客网 时间:2024/05/25 13:33
获取正在运行的进程信息:包括进程的名字,进程和进程之间的区别(包名),图标,占用内存的大小,用户进程还是系统进程:
显示实体类:
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;}@Overridepublic 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.applicationInfoApplicationInfo 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.applicationInfoApplicationInfo 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未解决。要是知道怎么解决的朋友指导下。(我想应该不是代码的问题)。
0 0
- 73获取正在运行的进程的信息
- Android:5.0以上获取系统正在运行的进程信息
- 获取正在运行的activity的信息
- 27、获取运行时信息(包括运行时的service、运行任务、正在运行的进程信息)
- Android -- 获取正在运行的service信息
- 获取Android系统正在运行的进程
- C# 获取正在运行的进程
- android获取正在运行的进程
- 获取正在系统运行的进程
- Android获取正在运行的进程
- 获取正在运行的进程列表
- iOS 获取正在运行的进程
- android获取正在运行的进程
- android获取当前正在运行的进程的数目
- 获取Java虚拟机正在运行所有线程的堆栈信息
- C 编程获取正在运行的程序进程号
- C 编程获取正在运行的程序进程号
- C#如何获取机器上正在运行的进程?
- Team Foundation Server团队管理工具
- CSS重置样式
- Makefile 中:= ?= += =的区别
- tomcat集群配置(windows+tomcat6+apache2.2.10)
- windows 支持的类型及定义
- 73获取正在运行的进程的信息
- JSON编码格式提交表单数据详解
- Foxmail错误信息::服务器不支持ssl,请检查服务器配置, errorCode: 1
- Ubuntu技巧之"xxx is not in the sudoers file"解决方法
- cpu核心数并非越多越好
- 数据结构实验之链表七:单链表中重复元素的删除
- 命令行启动WebLogic
- S3C2440开发板LED驱动——ioremap 映射 ********
- 伸展树