Android开发之获取当前进程的信息的集合

Android开发之获取当前进程的信息的集合

Android开发对于大家来说越来越接近。我们不用只局限于使用别人开发的应用。

在开发部分手机卫士等类型的app时,肯定要获取到当前所有运行的进程 。并且区分是系统进程还是用户进程,并且获取应用的信息。

思路:

1、通过ActivityManager.getRunningAppProcesses()获取正在运行的进程
2、得到应用的ApplicationInfo
3、if((applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == ApplicationInfo.FLAG_SYSTEM) 显示系统应用

代码实现:

进程的实体类如下:

    public class ProcessInfo {
        public String name;  //进程的名字
        public Drawable icon;  //进程的图标
        public String packName;  //进程的包名
        public boolean isSystem;   //是否为系统应用
        public long size;         //进程的占用的内存
    }

获取系统进程的集合的方法如下:

    public static List<ProcessInfo> getProcessInfo(Context ctx){
        //获取进程相关信息
        List<ProcessInfo> processInfoList = new ArrayList<ProcessInfo>();
        //1,activityManager管理者对象和PackageManager管理者对象
        ActivityManager am = (ActivityManager) ctx.getSystemService(Context.ACTIVITY_SERVICE);
        PackageManager pm = ctx.getPackageManager();
        //2,获取正在运行的进程的集合
        List<RunningAppProcessInfo> runningAppProcesses = am.getRunningAppProcesses();

        //3,循环遍历上诉集合,获取进程相关信息(名称,包名,图标,使用内存大小,是否为系统进程(状态机))
        for (RunningAppProcessInfo info : runningAppProcesses) {
            ProcessInfo processInfo = new ProcessInfo();
            //4,获取进程的名称 == 应用的包名
            processInfo.packageName = info.processName;
            //5,获取进程占用的内存大小(传递一个进程对应的pid数组)
            android.os.Debug.MemoryInfo[] processMemoryInfo = am.getProcessMemoryInfo(new int[]{info.pid});
            //6,返回数组中索引位置为0的对象,为当前进程的内存信息的对象
            android.os.Debug.MemoryInfo memoryInfo = processMemoryInfo[0];
            //7,获取已使用的大小
            processInfo.memSize = memoryInfo.getTotalPrivateDirty()*1024;

            try {
                ApplicationInfo applicationInfo = pm.getApplicationInfo(processInfo.packageName, 0);
                //8,获取应用的名称
                processInfo.name = applicationInfo.loadLabel(pm).toString();
                //9,获取应用的图标
                processInfo.icon = applicationInfo.loadIcon(pm);
                //10,判断是否为系统进程
                if((applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == ApplicationInfo.FLAG_SYSTEM){
                    processInfo.isSystem = true;
                }else{
                    processInfo.isSystem = false;
                }
            } catch (NameNotFoundException e) {
                //需要处理
                processInfo.name = info.processName;
                processInfo.icon = ctx.getResources().getDrawable(R.drawable.ic_launcher);
                processInfo.isSystem = true;
                e.printStackTrace();
            }
            processInfoList.add(processInfo);
        }
        return processInfoList;
    }

开始写个人博客,有些地方做的不对希望大家见谅,有什么不理解可以提问。谢谢大家观看,你们的认可才是我编写的动力。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值