在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
