標籤:android des blog http java 使用
將近一個月沒有更新部落格了,由於這段時間以來準備畢業論文等各種事務纏身,一直沒有時間和精力沉下來繼續學習和整理一些東西。最近剛剛恢複到正軌,正好這兩天看了下Android上關於圖片非同步載入的開源項目,就順便整理記錄下來,作為這一個多月來部落格的重新開火做飯吧。從今天起我會陸續恢複部落格的更新,也希望大家繼續支援。
今天要介紹的是Github上一個使用非常廣泛的圖片非同步載入庫Android-Universal-Image-Loader,該項目的功能十分強大,可以說是我見過的目前功能最全、效能最優的圖片非同步載入解決方案。做Android的同學都知道,Android載入大量圖片時,由於系統分配給圖片載入的記憶體大小有限,所以,如果載入圖片量非常大的話容易報OOM異常,關於這個異常已經有不少解決方案了,我就不贅述。下面就簡要介紹下這個開源項目的主要功能和使用:
一、功能概要
- 多線程圖片載入;
- 靈活更改ImageLoader的基本配置,包括最大線程數、緩衝方式、圖片顯示選項等;
- 圖片非同步載入緩衝機制,包括記憶體緩衝(軟引用)及本機快取;
- 對載入過程實現監聽和事件處理;
- 能夠配置載入圖片的顯示選項,包括圖片圓角處理和載入完成顯示動畫等;
二、基本使用
- 下載jar包universal-image-loader-1.8.5-with-sources.jar並匯入工程(這應該不用教了吧)
- 配置Manifest檔案,添加網路請求和訪問外部儲存的許可權,因為要進行網路請求和本機快取
[html] view plaincopy
- <uses-permission android:name="android.permission.INTERNET" />
- <!-- Include next permission if you want to allow UIL to cache images on SD card -->
- <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
3. 實現自訂的MyApplication類,並初始化ImageLoader,注意要在Manifest的Application標籤註明
android:name=".MyApplication",否則還是使用的預設的Application類。
[java] view plaincopy
- public class MyApplication extends Application {
- @Override
- public void onCreate() {
- super.onCreate();
-
- // This configuration tuning is custom. You can tune every option, you may tune some of them,
- // or you can create default configuration by
- // ImageLoaderConfiguration.createDefault(this);
- // method.
- ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(getApplicationContext())
- .threadPriority(Thread.NORM_PRIORITY - 2)
- .denyCacheImageMultipleSizesInMemory()
- .discCacheFileNameGenerator(new Md5FileNameGenerator())
- .tasksProcessingOrder(QueueProcessingType.LIFO)
- .enableLogging() // Not necessary in common
- .build();
-
- //Initialize ImageLoader with configuration
- ImageLoader.getInstance().init(config);
- }
- }
4. 配置圖片載入及顯示選項,此處有多種自訂配置選項,可以查看doc文檔一一瞭解,這裡就不贅述(實在太多)
[java] view plaincopy
- DisplayImageOptions options = new DisplayImageOptions.Builder()
- .showStubImage(R.drawable.ic_launcher)
- .showImageForEmptyUri(R.drawable.ic_launcher)
- .showImageOnFail(R.drawable.ic_launcher)
- .cacheInMemory(true)
- .cacheOnDisc(false)
- .displayer(new RoundedBitmapDisplayer(20))
- .build();
5. 使用ImageLoader載入圖片,這裡以在ListView中為每個item非同步載入圖片為例,只要在Adapter的getView方法中調用如下方法即完成了非同步列表圖片載入,其中options是之前定義的圖片載入和顯示選項,animateFirstListener是當圖片第一次載入的監聽事件,目的在於顯示一個淡入的顯示效果動畫,可以添加其他事件
- 另外,本例還實現了當列表滑動過程中暫停載入和在使用者手放開時才開始載入的功能,這樣的好處是保證在列表圖片非同步載入的過程中不出現卡頓的現象,保證載入的順滑性。實現這一功能的手段是使ListView監聽一個由ImageLoader包含的監聽事件PauseOnScrollListener。
- 若設定cacheOnDisc(true)的話,則緩衝的檔案可以在/sdcard/Android/data/[package_name]/cache目錄下看到。不過建議定期清理緩衝,否則時間一長,SD卡就會被佔滿了,同時也可以在ImageLoaderConfiguration中配置SD的緩衝策略,有限制快取檔案數量的,有限制快取檔案最大尺寸等選項。
- 如果在使用過程中遭遇OOM異常,則建議在ImageLoaderConfiguration中設定threadPoolSize在1-5之間合適。在DisplayOption配置時使用。
三、Demo效果
以下是Demo首頁,提供了三種組件顯示多圖非同步載入的方式:
下面是ListView和GridView以及ViewPager載入顯示的,載入效果非常流暢:
以上只是簡要介紹了一下ImageLoader的功能和使用概覽,具體實現代碼可以查看之前的原連結和下載我的工程代碼查看,詳細資料請參考官方文檔:點擊開啟連結
工程下載:工程源碼 雲端硬碟下載:http://pan.baidu.com/s/1jGJYTMY Android圖片非同步載入之Android-Universal-Image-Loader由源碼搜藏網整理,轉載請註明出處http://www.codesocang.com/jiaocheng/shoujikaifa/8077.html