android 清理进程数据

private ArrayList<Drawable> cleanData() {
        ArrayList<Drawable> icons = new ArrayList<>();
        ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);


        List<ActivityManager.RunningAppProcessInfo> infoList = am.getRunningAppProcesses();
        List<ActivityManager.RunningServiceInfo> serviceInfos = am.getRunningServices(100);

        long beforeMem = getAvailMemory(OptimizeActivity.this);
//        Log.d(TAG, "-----------before memory info : " + beforeMem);
        int count = 0;
        if (SDK_INT <= 20) {
            icons.clear();
            //To change body of implemented methods use File | Settings | File Templates.


            if (infoList != null) {
                for (int i = 0; i < infoList.size(); ++i) {
                    ActivityManager.RunningAppProcessInfo appProcessInfo = infoList.get(i);
                    Log.d(TAG, "process name : " + appProcessInfo.processName);
                    //importance 该进程的重要程度  分为几个级别,数值越低就越重要。
                    Log.d(TAG, "importance : " + appProcessInfo.importance);

                    // 一般数值大于RunningAppProcessInfo.IMPORTANCE_SERVICE的进程都长时间没用或者空进程了
                    // 一般数值大于RunningAppProcessInfo.IMPORTANCE_VISIBLE的进程都是非可见进程,也就是在后台运行着
                    if (appProcessInfo.importance > ActivityManager.RunningAppProcessInfo.IMPORTANCE_VISIBLE) {
                        String[] pkgList = appProcessInfo.pkgList;

                        for (int j = 0; j < pkgList.length; ++j) {//pkgList 得到该进程下运行的包名
                            Log.d(TAG, "It will be killed, package name : " + pkgList[j]);

                            Drawable icon = getIcon(pkgList[j]);
                            icons.add(icon);
                            am.killBackgroundProcesses(pkgList[j]);
                            count++;
                        }
                    }

                }


            }

            long afterMem = getAvailMemory(OptimizeActivity.this);
            Log.d(TAG, "----------- after memory info : " + afterMem);
            Toast.makeText(OptimizeActivity.this, "clear " + count + " process, "
                    + (afterMem - beforeMem) + "M", Toast.LENGTH_LONG).show();

            return icons;


        } else {
            icons.clear();


            PackageManager pm = this.getPackageManager();
            AppUtils proutils = new AppUtils(this);
            List<AndroidAppProcess> listInfo = ProcessManager.getRunningAppProcesses();
            if (listInfo.isEmpty() || listInfo.size() == 0) {
                return null;
            }
            for (AndroidAppProcess info : listInfo) {
                ApplicationInfo app = proutils.getApplicationInfo(info.name);
                // 过滤自己当前的应用
                if (app == null || this.getPackageName().equals(app.packageName)) {
                    continue;
                }
                // 过滤系统的应用
                if ((app.flags & app.FLAG_SYSTEM) > 0) {
                    continue;
                }
                AppEntity ent = new AppEntity();
                ent.setAppIcon(app.loadIcon(pm));//应用的图标
                ent.setAppName(app.loadLabel(pm).toString());//应用的名称
                ent.setPackageName(app.packageName);//应用的包名

                am.killBackgroundProcesses(app.packageName);

                // 计算应用所占内存大小
                int[] myMempid = new int[]{info.pid};
                Debug.MemoryInfo[] memoryInfo = am.getProcessMemoryInfo(myMempid);
                double memSize = memoryInfo[0].dalvikPrivateDirty / 1024.0;
                int temp = (int) (memSize * 100);
                memSize = temp / 100.0;
                ent.setMemorySize(memSize);//应用所占内存的大小
                Drawable drawable = app.loadIcon(pm);
                count++;
                icons.add(drawable);
//                    resule.add(ent);
            }
            long afterMem = getAvailMemory(OptimizeActivity.this);
            Log.d(TAG, "----------- after memory info : " + afterMem);
            Toast.makeText(OptimizeActivity.this, "clear " + count + " process, "
                    + (afterMem - beforeMem) + "M", Toast.LENGTH_LONG).show();
            return icons;
        }
    }

    private Drawable getIcon(String pakgename) {
        PackageManager pm = getPackageManager();
        try {
            appInfo = pm.getApplicationInfo(pakgename, PackageManager.GET_META_DATA);
//
//
// 应用名称
// pm.getApplicationLabel(appInfo)

//应用图标
            appIcon = pm.getApplicationIcon(appInfo);
            return appIcon;

        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
        return null;
    }


    //获取可用内存大小
    private long getAvailMemory(Context context) {
        // 获取android当前可用内存大小
        ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
        ActivityManager.MemoryInfo mi = new ActivityManager.MemoryInfo();
        am.getMemoryInfo(mi);
        //mi.availMem; 当前系统的可用内存
        //return Formatter.formatFileSize(context, mi.availMem);// 将获取的内存大小规格化
        return mi.availMem / (1024 * 1024);
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

安果移不动

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值