將近一個月沒有更新博客了,因爲這段時間以來準備畢業論文等各類事務纏身,一直沒有時間和精力沉下來繼續學習和整理一些東西。最近剛剛恢復到正軌,正好這兩天看了下Android上關於圖片異步加載的開源項目,就順便整理記錄下來,做爲這一個多月來博客的從新開火作飯吧。從今天起我會陸續恢復博客的更新,也但願你們繼續支持。html
今天要介紹的是Github上一個使用很是普遍的圖片異步加載庫Android-Universal-Image-Loader,該項目的功能十分強大,能夠說是我見過的目前功能最全、性能最優的圖片異步加載解決方案。作Android的同窗都知道,Android加載大量圖片時,因爲系統分配給圖片加載的內存大小有限,因此,若是加載圖片量很是大的話容易報OOM異常,關於這個異常已經有很多解決方案了,我就不贅述。下面就簡要介紹下這個開源項目的主要功能和使用:java
1、功能概要android
- 多線程圖片加載;
- 靈活更改ImageLoader的基本配置,包括最大線程數、緩存方式、圖片顯示選項等;
- 圖片異步加載緩存機制,包括內存緩存(軟引用)及本地緩存;
- 對加載過程實現監聽和事件處理;
- 可以配置加載圖片的顯示選項,包括圖片圓角處理和加載完成顯示動畫等;
2、基本使用
- 下載jar包universal-image-loader-1.8.5-with-sources.jar並導入工程(這應該不用教了吧)
- 配置Manifest文件,添加網絡請求和訪問外部存儲的權限,由於要進行網絡請求和本地緩存
- <uses-permission android:name="android.permission.INTERNET" />
-
- <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
3. 實現自定義的MyApplication類,並初始化ImageLoader,注意要在Manifest的Application標籤註明git
android:name=".MyApplication",不然仍是使用的默認的Application類。github
- public class MyApplication extends Application {
- @Override
- public void onCreate() {
- super.onCreate();
-
-
-
-
-
- ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(getApplicationContext())
- .threadPriority(Thread.NORM_PRIORITY - 2)
- .denyCacheImageMultipleSizesInMemory()
- .discCacheFileNameGenerator(new Md5FileNameGenerator())
- .tasksProcessingOrder(QueueProcessingType.LIFO)
- .enableLogging()
- .build();
-
-
- ImageLoader.getInstance().init(config);
- }
- }
4. 配置圖片加載及顯示選項,此處有多種自定義配置選項,能夠查看doc文檔一一瞭解,這裏就不贅述(實在太多)緩存
- 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配置時使用。
3、Demo效果多線程
如下是Demo首頁,提供了三種組件顯示多圖異步加載的方式:異步
下面是ListView和GridView以及ViewPager加載顯示的效果圖,加載效果很是流暢:ide
以上只是簡要介紹了一下ImageLoader的功能和使用概覽,具體實現代碼能夠查看以前的原連接和下載個人工程代碼查看,詳細信息請參考官方文檔:點擊打開連接
工程下載:工程源碼 雲盤下載:http://pan.baidu.com/s/1jGJYTMY Android圖片異步加載之Android-Universal-Image-Loader由源碼蒐藏網整理,轉載請註明出處http://www.codesocang.com/jiaocheng/shoujikaifa/8077.html