Android 5.0以上獲取系統運行進程信息


在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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM