android 清理进程数据

xiaoxiao2021-02-27  274

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); }
转载请注明原文地址: https://www.6miu.com/read-8769.html

最新回复(0)