ListView 優化
0層優化:不優化
1層優化:最多加載 n+1 個 convertView
複用 convertView 每次不用去加載一個新的 view 複用 convertView 來解決每次都加載一個新的 view
這樣就不用每次都加載一個新的view到內存中,減少了對內存的使用
2層優化:優化 convertView 裏面的子 view
優化其他的顯示視圖,如 TextView
一層優化只優化了 convertView 沒有優化 convertView 裏面的子 view,即使一層優化,優化了convertView
但是裏面的子 view 還是每次都去加載,這樣對內存也是相當好資源的
所有二層優化就是優化 convertView 裏面的子 view
也是使用 setTag 的方式來進行優化
3層優化:
對圖片的優化,即加載圖片,使用圖片的三級緩存
圖片的三級緩存
1).一級緩存(內存緩存),圖片在內存中,直接加載,如果內存緩存中沒有,則向二級緩存中加載圖片
2).二級緩存(本地緩存),圖片保存在本地SD卡中,如果一級緩存中沒有才在二級緩存中加載圖片,如二級緩存中也沒有
則向三級緩存中加載,如果有,加載的同時把圖片保存到一級緩存中
3).三級緩存(服務器緩存),圖片保存在服務器端,如果在一級緩存和二級緩存中都沒有找到圖片,就到服務器端的三級緩存中
加載,加載過來顯示出來的同時,保存到一級緩存和二級緩存中
使用圖片的三級緩存存在的問題(圖片的閃屏)
當快速滑動的時候,會出現圖片的緩存,因爲 convertView 的複用,和線程的多次啓動,但是還沒來得及顯示圖片就被複用,
但是又是一個新的線程,同一個視圖,多個線程,多張圖片,所以就會出現閃屏的問題
解決辦法:
使用 view 的setTag方法,把要顯示的圖片,保存到裏面
在啓動分線程聯網請求和顯示圖片的時候通過getTag取出來
再啓動分線程聯網請求圖片是,要請求的圖片是不是要顯示的,如果不是,則結束
在顯示圖片之前判斷是不是要顯示的那張圖片,有可能已經被更改了,如果不是結束,
4層優化:
當數據量非常大的時候,就需要使用四次優化,分頁或者其他技術
數據全部是從服務器端獲取,不可能一次獲取全部的數據,都是每次只獲取部分數據顯示
而不是全部加載到客戶端進行顯示,可能使用到的技術:分頁,下拉刷新等
ListView的四層優化
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
Android開發之ButterKnife,GreenDao簡單運用,以及推薦並使用一個好用的開源庫BaseRecyclerViewAdapterHelper。
不要说话丶
2018-08-27 20:04:11
nexus 5X update 8.0
杨飞扬
2018-08-27 20:04:03
Retrofit2 使用心得
杨飞扬
2018-08-27 20:03:51
Android studio Errors
杨飞扬
2018-08-27 20:03:48
Summary of problems when coding
杨飞扬
2018-08-27 20:03:48
Android Studio 配置Android Annotation
杨飞扬
2018-08-27 20:03:48
Android內存管理機制
叫我流氓
2018-08-27 20:03:47
2018 Android面試心得,已拿到offer
huison_ma
2018-08-27 20:03:45
Android中的dispatchTouchEvent()、onInterceptTouchEvent()和onTouchEvent()
叫我流氓
2018-08-27 20:03:44
Android滑動衝突解決方式(下拉刷新上拉加載更多,適配RecyclerView/ListView/ScrollView)
huison_ma
2018-08-27 20:03:44
Activity生命週期基礎
叫我流氓
2018-08-27 20:03:44
短信監聽---數據庫變動
叫我流氓
2018-08-27 20:03:44
Android應用程序框架四大重要的組件
叫我流氓
2018-08-27 20:03:44
Android studio 打包jar包
叫我流氓
2018-08-27 20:03:44
SQLite---T_double
叫我流氓
2018-08-27 20:03:43