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

原文地址:https://www.cnblogs.com/luoyangcn/p/4936830.html