进程管理——一键清理
步骤:1、遍历用户进程List和系统进程List,如果被选中,那么就将其移除 2、由于在遍历时,不能删除,所以要定义第三方的集合,用来保存要被移除的进程包名 3、然后遍历该集合,将要被移除的进程给移除掉 4、然后更新ListView界面 5、进程总数也要做相应的减少 6、可用内存也要做相应的增加 |
核心代码: /**
* 8、一键清理
*/
public void clearMaster(){
// 1、将要被清理的进程,存放在该集合中
List<TaskInfo> killTaskInfos = new ArrayList<TaskInfo>();
for (TaskInfo taskInfo : userTaskInfos) {
if (taskInfo.isChecked()) {
// userTaskInfos.remove(taskInfo);
killTaskInfos.add(taskInfo);
}
}
for (TaskInfo taskInfo : sysTaskInfos) {
if (taskInfo.isChecked()) {
// sysTaskInfos.remove(taskInfo);
killTaskInfos.add(taskInfo);
}
}
// 2、遍历要被清理的进程的集合
for (TaskInfo taskInfo : killTaskInfos) {
if (taskInfo.isUserTask()) {
activityManager.killBackgroundProcesses(taskInfo.getAppPackageName());//杀死后台进程
userTaskInfos.remove(taskInfo);//从用户进程列表删除
} else {
activityManager.killBackgroundProcesses(taskInfo.getAppPackageName());
sysTaskInfos.remove(taskInfo);
}
}
// 3、更改界面上正在运行的进程总个数
running_process_count -= killTaskInfos.size();
if (running_process_count>=0) {
tv_running_process_count.setText(getResources().getString(R.string.running_process_count)+running_process_count);
}
// 4、界面上可用内存变化
long availMemSize = 0;
for (TaskInfo taskInfo : killTaskInfos) {
if (taskInfo.isChecked()) {
availMemSize += taskInfo.getMemSize();
}
}
tv_available_memory.setText(getResources().getString(R.string.avail_and_total_memory)+
Formatter.formatFileSize(this,availableMemory +availMemSize)+"/"+Formatter.formatFileSize(this, totalMemory));
// 5、更新ListView界面的数据
adataer.notifyDataSetChanged();
}
|
|
问题1:集合遍历时,删除集合中的元素 11-18 11:18:48.673: E/AndroidRuntime(4031): java.util.ConcurrentModificationException 解决:定义第三方集合,保存要被删除的集合,然后再去删除 |
问题2:杀死别的后台进程,需要权限 <uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" /> activityManager.killBackgroundProcesses(taskInfo.getAppPackageName());//杀死后台进程 |