文章出處

ImageLoader類中包含了所有操作。他是一個單例,為了獲取它的一個單一實例,你需要調用getInstance()方法。在使用ImageLoader來顯示圖片之前,你需要初始化它的配置-ImageLoaderConfiguration使用init(…)方法。然后,你就可以使用可以明確地根據需要使用不同形式的displayImage(…)。

總之,ImageLoader最簡單的用法如下所示(使用默認配置):

ImageView imageView = ... // view, where the image will be displayed
String imageUrl = ... // image URL (e.g. "http://site.com/image.png", "file:///mnt/sdcard/img/image.jpg")
ImageLoader imageLoader = ImageLoader.getInstance();
imageLoader.init(ImageLoaderConfiguration .createDefault(context));
imageLoader.displayImage(imageUrl, imageView);

現在,讓我們看看完整的用法。

就像你已經知道的,我們首先需要用configuration對象來初始化ImageLoader。因為ImageLoader是一個單例,所以它需要在App一啟動的時候就初始化。我建議在一個重載了了的Application.onCreate()來做這件事。對于一個已經初始化的ImageLoader,重新初始化將不會對程序有任何影響。

接下來,我們創建一個configuration,他是一個ImageLoaderConfiguration類的對象,我們使用Builder來創建它。

File cacheDir = StorageUtils.getCacheDirectory(context,
"UniversalImageLoader/Cache");

ImageLoaderConfiguration config = new
ImageLoaderConfiguration .Builder(getApplicationContext())
.maxImageWidthForMemoryCache(800)
.maxImageHeightForMemoryCache(480)
.httpConnectTimeout(5000)
.httpReadTimeout(20000)
.threadPoolSize(5)
.threadPriority(Thread.MIN_PRIORITY + 3)
.denyCacheImageMultipleSizesInMemory()
.memoryCache(new UsingFreqLimitedCache(2000000)) // You can pass your own memory cache implementation
.discCache(new UnlimitedDiscCache(cacheDir)) // You can pass your own disc cache implementation
.defaultDisplayImageOptions(DisplayImageOptions.createSimple())
.build();

下面讓我們來看看每一個選項。

• maxImageWidthForMemoryCache() 和maxImageHeightForMemoryCache()用于將圖片將圖片解析成Bitmap對象。為了不儲存整個圖片,根據ImageView參數的值(要加載圖片的那個)減少圖片的大小。maxWidth和maxHeight(第一階段),layout_width layout_height(第二階段)。如果不定義這些參數(值為fill_parent和wrap_content被視為不確定的大小),然后尺寸的設定就會根據maxImageWidthForMemoryCache()和maxImageHeightForMemoryCache()的設置而定。原始圖像的大小最大會縮小到2倍(適合用fast decoding),直到寬度或高度變得小于指定值;

o默認值 - 設備的屏幕大小

• httpReadTimeout()設置圖片從網絡中加載的最大超時時間(以毫秒為單位)

o 默認值- 30秒

• threadPoolSize() 設置線程池的大小. 每一個圖片加載和顯示的任務都是在一個個單獨的線程中進行的,這些線程在從圖片網絡中被下載的時候就會進入線程池。因此,池的大小決定能同時運行的線程數。一個大的線程池能顯著地拖慢UI的響應速度,例如,列表的滾動就會變慢.
o 默認值- 5

• threadPriority()設置正在運行任務的所有線程在系統中的優先級(1到10);

o默認值- 4

• 調用denyCacheImageMultipleSizesInMemory()強制UIL在內存中不能存儲內容相同但大小不同的圖像。由于完整大小的圖片會存儲在磁盤緩存中,后面當圖片加載進入內存,他們就會縮小到ImageView的大小(圖片要顯示的尺寸),然而在某些情況下,相同的圖像第一次顯示在一個小的View中,然后又需要在一個大的View中顯示。同時,兩個不同大小的相同內容的圖片就會被將被存儲在內存中。這是默認的操作。denyCacheImageMultipleSizesInMemory()指令確保刪除前一個加載的圖像緩存的內存的大小

• 使用memoryCache(),你可以指定內存緩存的實現。你可以使用現成的解決方案(他們都是實現limited  size-cache,如果超過緩存大小,就通過一定算法刪除一個對象):

o FIFOLimitedCache (根據先進先出的原則上刪除多余對象)
o LargestLimitedCache (空間占用最大的對象會被刪除)
o UsingAgeLimitedCache (最早被添加的對象會被刪除)
o UsingFreqLimitedCache (最少被用到的對象會被刪除)
或者,你可以實現通過實現接口MemoryCacheAware <String,Bitmap>來實現自己的緩存;
o 默認值 - 使用2 MB的內存限制的UsingFreqLimitedCache
memoryCacheSize() 設置內存緩存的最大占用空間. 在這種情況下,默認的緩存策略是 - UsingFreqLimitedCache.
o 默認值 - 2 MB

• Using discCache(), 你可以定義自己的磁盤緩存. 也可以現成的解決方案 (文件跟特定的URL匹配,文件名為這些URL的哈希值):

o UnlimitedDiscCache (通常的策略, 緩存大小沒有限制)
o FileCountLimitedDiscCache (限定大小的緩存)
o TotalSizeLimitedDiscCache (限定文件個數的緩存策略)
另外,你也可以通過實現DiscCacheAware接口定義自己的緩存
o 默認值 - UnlimitedDiscCache

• 使用defaultDisplayImageOptions(),你可以設置image顯示選項,如果自定義選項沒有傳遞給displayImage(),它將用于displayimage(…)方法的每一次調用。下面,我將詳細討論這些選項。

我們可以構建一個configuration對象或信任一個開發人員(比如我)然后使用默認的configuration:

 

ImageLoaderConfiguration config =
ImageLoaderConfiguration.createDefault(context);

 

因此,configuration就創建好了。現在,ImageLoader可以通過它初始化了:

ImageLoader.getInstance().init(config);

就這樣,ImageLoader已經可以使用了。在下一篇文章中我們還會講到它。

 

 

原文鏈接

http://www.intexsoft.com/blog/item/72-universal-image-loader-part-2.html


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()