78进程管理器的实现

来源:互联网 发布:锻炼时间提醒软件 编辑:程序博客网 时间:2024/05/16 03:38

实现后的效果如下:



在下面添加了四个按钮:全选、反选、清理、设置。

全选的点击事件,其中如果包名是本身的话,不选。

/** * 全选 *  * @param view */public void selectAll(View view) {for (TaskInfo info : allTaskInfos) {if (getPackageName().equals(info.getPackname())) {continue;}info.setChecked(true);}// 必须通知数据更新了adapter.notifyDataSetChanged();}
反选的点击事件:

/** * 反选 *  * @param view */public void selectOppo(View view) {for (TaskInfo info : allTaskInfos) {if (getPackageName().equals(info.getPackname())) {continue;}info.setChecked(!info.isChecked());}adapter.notifyDataSetChanged();}

设置本身的CheckBox不可见:

if (getPackageName().equals(taskInfo.getPackname())) {viewHolder.cb_status.setVisibility(View.INVISIBLE);} else {viewHolder.cb_status.setVisibility(View.VISIBLE);}

为了避免每次杀死一个进程后ListView重新刷新:

if (adapter == null) {adapter = new TaskManagerAdapter();lv_task_manager.setAdapter(adapter);} else {adapter.notifyDataSetChanged();}

清理的逻辑:

/** * 清理 *  * 这里存在一个很大的BUG *  * @param view */public void killAll(View view) {// ActivityManager am = (ActivityManager)// getSystemService(ACTIVITY_SERVICE);//// int count = 0;//// int savedMem = 0;//// // 记录被杀死的条目// List<TaskInfo> killedTaskInfos = new ArrayList<TaskInfo>();//// for (TaskInfo info : allTaskInfos) {// if (info.isChecked()) {// 被勾选了,杀死这个进程// // 需要添加权限: <uses-permission// // android:name="android.permission.KILL_BACKGROUND_PROCESSES"/>// am.killBackgroundProcesses(info.getPackname());//// if (info.isUserTask()) {// 用户进程// userTaskInfos.remove(info);// } else {// systemTaskInfos.remove(info);// }//// killedTaskInfos.add(info);//// count++;// savedMem += info.getMemSize();// // 不可以在迭代的时候修改集合(切记!!!!)// // allTaskInfos.remove(info);// }//// }// allTaskInfos.removeAll(killedTaskInfos);// adapter.notifyDataSetChanged();// Toast.makeText(// this,// "杀死了" + count + "个进程," + "释放了"// + Formatter.formatFileSize(this, savedMem) + "的内存", 1)// .show();// processCount -= count;// availMem += savedMem;// tv_process_count.setText("运行中进程:" + processCount + "个");// tv_mem_info.setText("剩余/总内存:"// + Formatter.formatFileSize(this, availMem) + "/"// + Formatter.formatFileSize(this, totalMem));// =================第一个版本==============================ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE);int total = 0;long savedMem = 0;List<TaskInfo> killedTaskInfos = new ArrayList<TaskInfo>();for (TaskInfo info : userTaskInfos) {if (info.isChecked()) {am.killBackgroundProcesses(info.getPackname());total++;savedMem += info.getMemSize();// userTaskInfos.remove(info);killedTaskInfos.add(info);}}for (TaskInfo info : systemTaskInfos) {if (info.isChecked()) {am.killBackgroundProcesses(info.getPackname());total++;savedMem += info.getMemSize();// systemTaskInfos.remove(info);killedTaskInfos.add(info);}}for (TaskInfo info : killedTaskInfos) {if (info.isUserTask()) {userTaskInfos.remove(info);} else {systemTaskInfos.remove(info);}}// 给用户一个土司提醒 告诉用户你干了什么事情。Toast.makeText(this,"杀死了" + total + "个进程,释放了"+ Formatter.formatFileSize(this, savedMem) + "的内存", 1).show();processCount -= total;availMem += savedMem;tv_process_count.setText("运行中进程:" + processCount + "个");tv_mem_info.setText("剩余/总内存:"+ Formatter.formatFileSize(this, availMem) + "/"+ Formatter.formatFileSize(this, totalMem));adapter.notifyDataSetChanged();}

分两个集合去做处理(不对全部的集合做处理,因为全部的集合有两个小标签不包括在内),当item处于选中的状态下,调用:killBackgroundProcesses杀死进程,将相应的包名传入该方法。









0 0
原创粉丝点击