Android Apk 应用信息获取之ActivityManager

        前面使用了PackageManager获得了所有的应用包信息,但哼哈二将中海油一员大将没说到,那就是——ActivityManager,它的功能丝毫不逊色与PackageManager。事实上,它们在使用上各有侧重点,PackageManager重点在于获得应用的包信息,而ActivityManager重点在于获得在运行的应用程序信息。

        同PackageManager一样,ActivityManager也封装了不少Bean对象,下面选几个比较重要的来看看。

        第一个是内容信息:

  • ActivityManager.MemoryInfo

        MemoryInfo有几个非常重要的字段:availMem——系统可用内存,totalMem——总内存,threshold——低内存的阈值,即区分是否低内存的临界值,lowMemory——是否处于低内存。

  • Debug.MemoryInfo

        事实上,Android中还有一个MemoryInfo,它来自Debug.MemoryInfo,前面看的是ActivityManager.MemoryInfo通常用于获取全局的内存使用,而Debug.MemoryInfo用于统计进程下的内存信息。

  • RunningAppProcessInfo

        RunningAppProcessInfo顾名思义,就是运行程序的信息,存储的字段自然是进程相关的信息,process——进程名,pid——进程pid,uid——进程uid,pkgList——该进程下的所有包。

  • RunningServiceInfo

        RunningServiceInfo与RunningAppProcessInfo类似,用于封装运行的服务信息,在它里面同样包含了一些服务进程的信息,同时还有一些其他信息,同时还有一些其他信息。activeSince——第一次被激活的时间、方式,foregroup——服务是否在后台执行。

        下面同样是通过一个例子来看看如何使用ActivityManager,与在PackageManager中一样,封装一个Bean来保存我们需要的信息字段,代码如下所示。

package test.chenj.study_chapter7_7;

/**
 * Created by 72312 on 2018/1/5.
 */

public class AmProcessInfo {
    private String pid;
    private String uid;
    private String memorySize;
    private String processName;

    public AmProcessInfo() {
    }

    public String getPid() {
        return pid;
    }

    public String getUid() {
        return uid;
    }

    public String getMemorySize() {
        return memorySize;
    }

    public String getProcessName() {
        return processName;
    }

    public void setPid(String pid) {
        this.pid = pid;
    }

    public void setUid(String uid) {
        this.uid = uid;
    }

    public void setMemorySize(String memorySize) {
        this.memorySize = memorySize;
    }

    public void setProcessName(String processName) {
        this.processName = processName;
    }
}

        接下来,可以通过调用getRunningAppProcess方法,返回当前运行的进程信息,并将我们关心的信息保存到Bean中,代码如下所示。

    private List getAmProcessList(){
        List list = new ArrayList<>();
        List amList = am.getRunningAppProcesses();
        for (ActivityManager.RunningAppProcessInfo info : amList) {
            AmProcessInfo amProcessInfo = new AmProcessInfo();
            amProcessInfo.setPid("pid:" + info.pid);
            amProcessInfo.setUid("uid:" + info.uid);
            amProcessInfo.setProcessName("processName:" + info.processName);

            int[] memoryPid = new int[]{info.pid};
            Debug.MemoryInfo[] memoryInfos = am.getProcessMemoryInfo(memoryPid);
            amProcessInfo.setMemorySize("memorySize:" + memoryInfos[0].getTotalPss());
            list.add(amProcessInfo);
        }
        return list;
    }

        其中获取ActivityManager实体类通过以下方法取得。

am = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);

        程序运行效果如图所示。

Android Apk 应用信息获取之ActivityManager_第1张图片

你可能感兴趣的:(android群英传笔记)