[mobilesafe] 06_进程管理——一键清理

Android 4.0

进程管理——一键清理
步骤: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(thistotalMemory));
    // 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());//杀死后台进程