ListView优化问题
??????? 在使用ListView控件的過程中,由于加載條目過多,在滑動時可能會造成卡頓,這是因為ListView在當前屏幕顯示多少個條目,就會創建多少個對象,每一個條目都是一個對象。在滑動時,滑出屏幕的條目對象會被銷毀,新加載到屏幕的條目會創建新的對象,因此在滑動時會不斷地創建對象和銷毀對象,并且每一個條目都需要加載一次布局,加載布局不僅對內存消耗比較大,而且浪費時間。如果條目包含圖片,圖片加載的時間比較長,就會造成內存溢出異常。
??????? 因此,我們在開發時需要對ListView進行優化,目的在于使滑動時不會重復創建對象,減少內存消耗和屏幕渲染處理。
??????? (1)創建靜態類
??????? 創建一個靜態類,將需要加載的控件變量放在該類中,這樣可以保證所有的控件只創建一次對象,不會重復創建對象。
static class ViewHolder{TextView tv_title;ImageView iv_img;Button btn_detail; }??????? (2)服用緩存視圖對象
??????? 在Adapter的getView(int position,View convertView,ViewGroup parent)方法中convertView代表的就是之前滑出屏幕的條目對象。如果滑動ListView,滑動出屏幕的View對象會以緩存的形式存在,而convertView就是緩存的View對象,可以復用緩存該對象減少新對象的創建。在加載布局文件時先判斷convertView是否存在,不存在則說明沒有緩存的View對象,則使用View.inflate()加載布局,進行布局的初始化,否則復用緩存的View對象。
if(convertView == null){convertView = View.inflate(context,R.layout.item,null);holder = new ViewHolder();holder.tv_title = findViewById(R.id.tv_title)...convertView.setTag(holder); } else{holder = convertView.getTag(); }注意:getView()方法返回值為View,復用時需將返回值改為convertView
??????? (3)使用RecycleView替換
??????? RecycleView是ListView的提升,在內存優化等方面都有很大的優勢,但是有些操作可能會比較復雜,如果實現中可以使用RecycleView的話,建議使用RecycleView代替ListView。
總結
以上是生活随笔為你收集整理的ListView优化问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: cutftp连接server-U中文乱码
- 下一篇: UNIX编程艺术笔记