減小內存中view對象的建立個數(明顯提升效率)
複用歷史緩存的view對象,減小Android內存消耗java
減小子孩子(子控件)的查詢次數(控件較少時提升不明顯,大概5%)
findviewbyid查詢比較費時,只查找一次,找到後存起來sql
分批分頁加載數據(避免數據過多形成內存不足)緩存
1.直接利用sql語句查詢若干條數據,limit 數據量,offset 從哪開始ide
例如:select xx,xx from xxx order by _id desc limit ? offset ?
2.當listview滾動到最後時候再加載offset個數據
1.爲listview註冊滾動事件的監聽
2.onScrollStateChanged:三種狀態
1.在空閒狀態(idle)時候判斷listview的滾動位置
2.getLastPOsition
3.新來的數據加到原來的後面
3.滾動到最後的時候要提示用戶數據已經所有加載完成了了,同時不在查詢
4.分頁:當數據量特別大的時候,能夠將數據分紅若干頁。一頁加載完了,就直
接後一頁就 覆蓋前一個,使用同一個集合便可佈局
//使用listView.setAdapter(new MyAdapter()); class MyAdapter extends BaseAdapter { //一共有多少個item,必定要寫 @Override public int getCount() { return infos.size(); } // 有多少個條目被使用,就調用多少次 @Override public View getView(final int position, View convertView, ViewGroup parent) { View view; ViewHolder viewHolder; //判斷是否能夠複用 if (convertView == null) { Log.i(TAG, "建立新的view對象:" + position); // 把一個佈局文件轉化成 view對象。 viewHolder = new ViewHolder(); view = View.inflate(getApplicationContext(),R.layout.list_item_callsms, null); viewHolder.tv_number = (TextView) view.findViewById(R.id.tv_black_number); viewHolder.tv_mode = (TextView) view.findViewById(R.id.tv_block_mode); viewHolder.iv_delete = (ImageView) view.findViewById(R.id.iv_delete); //當第一次找到控件的時候找到他們的引用,存放在記事本,放在父親的口袋 view.setTag(viewHolder); } else { // 複用原來的代碼 view = convertView; //取出存放的引用 viewHolder = (ViewHolder) view.getTag(); } //數據綁定 viewHolder.tv_number.setText(infos.get(position).getNumber()); String mode = infos.get(position).getMode(); if ("1".equals(mode)) { viewHolder.tv_mode.setText("攔截短信"); } else if ("2".equals(mode)) { viewHolder.tv_mode.setText("攔截電話"); } else { viewHolder.tv_mode.setText("電話短信所有攔截"); } return view; } @Override public Object getItem(int position) { // TODO Auto-generated method stub return null; } @Override public long getItemId(int position) { // TODO Auto-generated method stub return 0; } } /** * 減小子孩子(子控件)的查詢次數,findviewbyid查詢比較費時, * 只查找一次,找到以後作一個標記,(記事本)把對應的關係記錄下來 * view對象的容器 記錄孩子的內存地址。 至關於一個記事本 */ static class ViewHolder { TextView tv_number; TextView tv_mode; ImageView iv_delete; }