在Android 5.0以上系统,调用getRunningAppProcesses 方法返回的列表为空,这是因为谷歌考虑到安全原因,已经把这个方法移除掉了,
那以后要获取系统运行的后台进程这个方法用不了了,谷歌了一大把,终于找到了解决的方法,获取系统运行的进程代码如下所示:
//这是一个实体类,就是描述应用的一些信息
public class TaskInfo { // 应用程序的图标 private Drawable icon; // 应用程序的名字 private String name; // 应用程序的包名 private String packname; // 占用内存的大小 private long memsize; // true 用户进程 false 系统进程 private boolean userTask; //是否已经勾选 private boolean cbchecked; public boolean isCbchecked() { return cbchecked; } public void setCbchecked(boolean cbchecked) { this.cbchecked = cbchecked; } 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 + "]"; } }
/** * 获取系统运行的进程信息 * * @param context * @return */ public static List<TaskInfo> getTaskInfos1(Context context) { // 应用程序管理器 ActivityManager am = (ActivityManager) context .getSystemService(context.ACTIVITY_SERVICE); // 应用程序包管理器 PackageManager pm = context.getPackageManager();
// 获取正在运行的程序信息, 就是以下粗体的这句代码,获取系统运行的进程 要使用这个方法,需要加载
// import com.jaredrummler.android.processes.ProcessManager;
// import com.jaredrummler.android.processes.models.AndroidAppProcess; 这两个包, 这两个包附件可以下载
List<AndroidAppProcess> processInfos = ProcessManager.getRunningAppProcesses(); List<TaskInfo> taskinfos = new ArrayList<TaskInfo>(); // 遍历运行的程序,并且获取其中的信息 for (AndroidAppProcess processInfo : processInfos) { TaskInfo taskinfo = new TaskInfo(); // 应用程序的包名 String packname = processInfo.name; taskinfo.setPackname(packname); // 湖区应用程序的内存 信息 android.os.Debug.MemoryInfo[] memoryInfos = am .getProcessMemoryInfo(new int[] { processInfo.pid }); long memsize = memoryInfos[0].getTotalPrivateDirty() * 1024L; taskinfo.setMemsize(memsize); try { // 获取应用程序信息 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 (NameNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); // 系统内核进程 没有名称 taskinfo.setName(packname); Drawable icon = context.getResources().getDrawable( R.drawable.default_icon); taskinfo.setIcon(icon); } if (taskinfo != null) { taskinfos.add(taskinfo); } } return taskinfos; }
以下两个包下载地址如下所示:
com.jaredrummler.android.processes.ProcessManager;
com.jaredrummler.android.processes.models.AndroidAppProcess;
下载地址: http://download.csdn.net/detail/luoyangwyb/9241279