必威体育Betway必威体育官网
当前位置:首页 > IT技术

Android Apk 应用信息获取之ActivityManager

时间:2019-10-19 09:12:25来源:IT技术作者:seo实验室小编阅读:82次「手机版」
 

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<AmProcessInfo> getAmProcessList(){
        List<AmProcessInfo> list = new ArrayList<>();
        List<ActivityManager.RunningAppProcessInfo> 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开发学习教程集锦【初学者】

根据Google的报告,截止2017年5月为止,Android活跃用户已超过20亿,并还在持续增长中。Android系统在几个主要的市场上已超过了iOS系统

Android OpenGLES2.0(一)——了解OpenGLES2.0

原文链接:Android OpenGLES2.0(一)——了解OpenGLES2.0什么是OpenGL ES?OpenGL(全写Open Graphics Library)是指定义了一个跨编程语言、

最新鲜最详细的Android SDK下载安装及配置教程

最近Neo突发神经,想要将学过的一些计算机视觉、机器学习中的算法都放到移动设备上去跑跑,因为移

Android Surface、SurfaceView、SurfaceHolder及Sur

最近学习Google的zxing扫码,接触到Surface、Surface和Viewfindview,这里先记下Surface学习到的好东西 转载:http://blog.csdn.net/pa

android组件GridView简单使用

GridView与ListView的用法基本一致,不同的只是布局。当我们打开手机,应用会以宫格显示,那就是GridView。 以代码形式展示给大家,适

分享到:

栏目导航

推荐阅读

热门阅读