Android之——殺死使用者選中的進程最佳化

來源:互聯網
上載者:User

標籤:android   進程   最佳化   使用者體驗   listview   

轉載請註明出處:http://blog.csdn.net/l1028386804/article/details/47281055

在上一篇博文《Android之——殺死使用者選中的進程(釋放進程佔用的空間)》一文中,向大家介紹了如何殺死使用者選中的進程,但是,遺留了一個問題,那就是殺死進程後,ListVIew列表沒有立即重新整理,這篇文章我們就來解決這個問題,最佳化一下ListView的顯示,提升使用者體驗。我們這篇博文同樣是基於上一篇博文來進行最佳化的,請大家先閱讀上一篇博文《Android之——殺死使用者選中的進程(釋放進程佔用的空間)》

一、原理

這裡,我們主要最佳化的是TaskManagerActivity類中自訂的適配器類,在這個自訂配接器類中,我們增加了一個屬性欄位List<TaskInfo> infos,這個集合代表的是當前要顯示到ListView中的資料集合,同時為這個集合設定一個set方法,當其他地方對資料集合進行了更改的時候,比如,添加或者移出了集合中的資料,只要調用自訂配接器的set方法即可將更新後的list集合傳遞到自訂配接器類中,同時,調用ListView的notifyDataSetChanged()方法即可重新整理ListView頁面。

二、實現1、更新自訂配接器TaskManagerAdapter

在這個自訂配接器類中,我們增加了一個屬性欄位List<TaskInfo> infos,這個集合代表的是當前要顯示到ListView中的資料集合,同時為這個集合設定一個set方法,當其他地方對資料集合進行了更改的時候,比如,添加或者移出了集合中的資料,只要調用自訂配接器的set方法即可將更新後的list集合傳遞到這個自訂配接器類中。

具體實現代碼如下:

/** * 自訂配接器 * @author liuyazhuang * */private class TaskManagerAdapter extends BaseAdapter{private LayoutInflater mInflater;private List<TaskInfo> infos;public void setInfos(List<TaskInfo> infos) {this.infos = infos;}public TaskManagerAdapter(){mInflater = getLayoutInflater();}@Overridepublic int getCount() {return infos.size();}@Overridepublic Object getItem(int position) {return infos.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {View view = null;ViewHolder holder = null;if(convertView != null){view = convertView;holder = (ViewHolder) view.getTag();}else{view = mInflater.inflate(R.layout.task_manager_item, null);holder = new ViewHolder();holder.iv_task_manager_icon = (ImageView) view.findViewById(R.id.iv_task_manager_icon);holder.iv_task_manager_name = (TextView) view.findViewById(R.id.tv_task_manager_name);holder.iv_task_manager_memory = (TextView) view.findViewById(R.id.tv_task_manager_memory);//擷取到UI上的CheckBox控制項holder.cb_task_manager_selected = (CheckBox) view.findViewById(R.id.cb_task_manager_selected);view.setTag(holder);}TaskInfo taskInfo = infos.get(position);holder.iv_task_manager_icon.setImageDrawable(taskInfo.getTask_icon());holder.iv_task_manager_memory.setText("佔用的記憶體:"+TextFormat.formatByte(taskInfo.getTask_memory()*1024));holder.iv_task_manager_name.setText(taskInfo.getTask_name());String packageName = taskInfo.getPackageName();//應用程式是當前啟動並執行程式if(packageName.equals(getPackageName())){holder.cb_task_manager_selected.setVisibility(View.GONE);}else{holder.cb_task_manager_selected.setVisibility(View.VISIBLE);}//擷取條目的選中狀態boolean isChecked = taskInfo.isChecked();if(isChecked){holder.cb_task_manager_selected.setChecked(true);}else{holder.cb_task_manager_selected.setChecked(false);}return view;}}

2、更新Handler

這裡由於我們更新了自訂配接器類,其中顯示的資料設定方式發生了變化,所以,我們也要更新一下預設進程列表的顯示方式,我們在Handler執行個體化自訂配接器類TaskManagerAdapter後,需要手動將進程列表集合set到這個類中的list屬性欄位中,然後調用ListView的notifyDataSetChanged()方法重新整理列表顯示。

具體代碼如下:

private Handler mHandler = new Handler(){public void handleMessage(android.os.Message msg) {switch (msg.what) {case SUCCESS_GETTASKINFO:long total = TaskUtils.getAvailMem(TaskManagerActivity.this);for(TaskInfo info : taskInfos){total += info.getTask_memory() * 1024;}//可用記憶體String availMemStr = TextFormat.formatByte(TaskUtils.getAvailMem(TaskManagerActivity.this));//總記憶體String totalMemStr = TextFormat.formatByte(total);tv_task_manager_task_memory.setText("可用/總記憶體:"+availMemStr+"/"+totalMemStr);mAdapter = new TaskManagerAdapter();mAdapter.setInfos(taskInfos);rl_loading.setVisibility(View.GONE);lv_taskmanage.setAdapter(mAdapter);break;default:break;}};};

3、更新“一鍵清理”的點擊事件

在這個方法中,我們新建立了一個list集合,用來存放沒有被殺死的進程,處理完後,將這個沒有被殺死的進程集合set給自訂配接器類TaskManagerAdapter的list集合,然後調用ListView的notifyDataSetChanged()方法重新整理列表顯示。

注意:遍曆集合的時候,是不能對集合進行增、刪、改操作的。

具體代碼如下:

/** * 殺死進程 * @param v */public void kill_process(View v){//存放沒有被殺死的進程List<TaskInfo> newTaskInfos = new ArrayList<TaskInfo>();for(TaskInfo taskInfo : taskInfos){if(taskInfo.isChecked()){//殺死選中的進程am.killBackgroundProcesses(taskInfo.getPackageName());}else{newTaskInfos.add(taskInfo);}}mAdapter.setInfos(newTaskInfos);mAdapter.notifyDataSetChanged();}

三、運行效果

四、溫馨提示

本執行個體中,為了方面,我把一些文字直接寫在了布局檔案中和相關的類中,大家在真實的項目中要把這些文字寫在string.xml檔案中,在外部參考這些資源,切記,這是作為一個Android程式員最基本的開發常識和規範,我在這裡只是為了方便直接寫在了類和布局檔案中。

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

Android之——殺死使用者選中的進程最佳化

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.