最近系統學習了關於異步數據加載的相關知識,之前在項目中,這一塊不是由我負責,現在回顧一下,項目中沒有用到數據緩存,即每次用戶的請求都要去網絡獲取,網絡不好時,加載慢或者加載不出來,測試人員提出該問題時,沒有引起重視。之前我也經常會用到顯示網絡中獲取的圖片工具(其他同事編寫),但並不理解其中的緣故。
這個例子具有很強的通用性,下載後以後再做異步數據加載,只需要根據需求少量修改即可。
直接下載Demo
需求:
1) ListView 橫向的item展示用戶的 頭像和 姓名;
2) Adapter的顯示中緩存View並優化性能;
3) 將已經加載的圖片加入緩存目錄(首選SD卡);
4) 異步加載圖片;
5) 關閉Activity後刪除緩存的內容。
6) 從http中獲取xml數據,並解析成List<person>數據<Web端提供XMl數據>
技術需求的相關解釋:
1、Adapter的顯示中緩存View,是對convertView的重用。
2、Adapter優化性能,使用Holder可以避免每次調用getView時都會重新運行findViewById(),降低系統性能。
3、緩存圖片至SD卡:如果image圖片內容太多,緩存在內存中會耗用過多的手機內存。
4、AsyncTask的使用:AsyncTask可以限制開啓線程的條數(線程池),避免使用Thread+Handler 造成的有多少條目就要開啓多少線程的情況(異步加載圖片,需要開啓子線程,如果不是異步加載圖片,會很容易導致應用無響應的情況)。
注意:
本文中涉及到的圖片及person.xml文件已經打包到該項目的根目錄下,你如果要使用到你的項目中,需要修改url地址,我是採用的本地Tomcat,並且將images 和 person.xml放在web端代碼的根目錄下,直接訪問的。實際的應用中,web端一般是從數據庫中讀取數據,通過Servlet方式,將響應返回給客戶端。
最終效果:
Sd卡中的目錄及文件: