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);
}
android 清理进程数据
最新推荐文章于 2021-12-08 14:43:11 发布