編輯:關於android開發
上一篇記錄了使用ListView展示出來了100條數據,當慢慢拖動的時候,不會有問題,但是當拖動很快的時候,應用會報anr錯誤
查看錯誤日志,看到報OutOfMemoryError,內存不足
ListView在顯示條目的時候,每顯示出來一條都會調用一下getView()方法
這個方法裡面將xml文件轉成View對象非常的消耗資源,要避免頻繁調用:
在重寫的getView()方法中,會傳遞進來一個View對象convertView
當手向上拖動ListView的時候,上面隱藏出去一條的條目會保存在convertView對象中,這個convertView對象可以作為xml轉換成的目標View對象
此時,創建新的View對象,只會在第一次屏幕展示的時候創建,之後的條目顯示,都是使用的之前緩存的View對象
下面調用View對象的findViewById()方法,也非常消耗內存:
在android布局中,是個典型的樹結構,在查找控件的時候,需要遍歷整個的結構,有可能非常消耗時間
定義一個內部類ViewHolder
定義屬性根據業務
在getView()方法中,獲取ViewHolder對象
賦值ViewHolder對象的屬性,findViewById()查找到的View控件對象
當轉換成的View對象創建的時候,調用View對象的setTag()方法,參數:VIewHolder對象
使用View對象的getTag()方法,獲取出ViewHolder對象使用
class ViewHolder{
public TextView phoneView;
public TextView modeView;
}
private class MyAdapter extends BaseAdapter {
@Override
public int getCount() {
// TODO Auto-generated method stub
return infos.size();
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view;
ViewHolder holder=new ViewHolder();
if(convertView==null){
view = View.inflate(CallSmsSafeActivity.this,
R.layout.list_call_sms_safe_item, null);
holder.phoneView=(TextView) view
.findViewById(R.id.tv_main_phone);
holder.modeView=(TextView) view
.findViewById(R.id.tv_block_mode);
view.setTag(holder);
System.out.println("創建新的View對象"+position);
}else{
view=convertView;
holder=(ViewHolder) view.getTag();
System.out.println("使用歷史View對象"+position);
}
holder.phoneView.setText(infos.get(position).get("phone"));
switch (infos.get(position).get("mode")) {
case "1":
holder.modeView.setText("電話攔截");
break;
case "2":
holder.modeView.setText("短信攔截");
break;
case "3":
holder.modeView.setText("全部攔截");
break;
default:
break;
}
return view;
}

Android應用安全開發之淺談網頁打開APP,androidapp
Android應用安全開發之淺談網頁打開APP,androidapp一、網頁打開APP簡介 Android有一個特性,可以通過點擊網頁內的某個鏈接打開APP,或者在其他A
A DB2 Performance Tuning Roadmap--Q-BASED A/A IMPLEMENATION
A DB2 Performance Tuning Roadmap--Q-BASED A/A IMPLEMENATIONWhy Active/Active ? - Bus
ListFragment的使用,ListFragment使用
ListFragment的使用,ListFragment使用ListFragment繼承了Fragment,顧名思義,ListFragment是一種特殊的Fragment
簡單登錄案例(SharedPreferences存儲賬戶信息)&聯網請求圖片並下載到SD卡(文件外部存儲),sharedpreferences
簡單登錄案例(SharedPreferences存儲賬戶信息)&聯網請求圖片並下載到SD卡(文件外部存儲),sharedpreferences 新人剛學習And