在之前的文章,我們重點講了Android-Universal-Image-Loader的三個主要組件,現在我們終於可以開始使用它了。
Android-Universal-Image-Loader有四個重載方法
void displayImage(String url, ImageView view) void displayImage(String url, ImageView view, DisplayImageOptions options) void displayImage(String url, ImageView view, ImageLoadingListener listener) void displayImage(String url, ImageView view, DisplayImageOptions options, ImageLoadingListener listener)
第一個重載方法
所有東西都很簡單。url就是圖片的下載地址,ImageView就是需要顯示它的imageView控件。這個ViewOption(DisplayOptions)將使用默認配置option(defaultDisplayImageOptions(…))
第二個重載方法
我們可以針對特定的任務做一些特定的option。首先,我會先給一個使用特定操作的例子:
DisplayImageOptions options = new DisplayImageOptions.Builder() .showStubImage(R.drawable.stub_image) .showImageForEmptyUrl(R.drawable.image_for_empty_url) .cacheInMemory() .cacheOnDisc() .decodingType(DecodingType.MEMORY_SAVING) .build();
• 當真正的圖片正在下載,是否需要在ImageView中顯示另一張圖片,顯示什么圖片;
• 當遇到空的Image URL時,是否需要在ImageView中顯示另一張圖片,顯示什么圖片;
• 是否在內存中緩存已加載的image;
• 是否在磁盤中(file system)緩存已下載的圖片;
• 要盡可能快(DecodingType.FAST)還是盡可能節約地使用RAM(DecodingType.MEMORY_SAVING)
所以,我們可以在每次調用displayImage()方法的時候將這些option傳遞過去,或者在初始化中的configuration中定義默認的option,然后程序中就會使用這些特定的options不管你有沒有明確地傳遞DisplayImageOptions。
第三個重載方法
除此之外,我們可以使用ImageLoadingListener監聽圖片的下載和顯示過程:
public interface ImageLoadingListener { void onLoadingStarted(); void onLoadingFailed(); void onLoadingComplete(); }
第四個重載方法是最強大的。你可以定制option和監聽那些過程
1、為了正常運行,你需要傳遞給ImageLoader正確的參數。重點是ImageView而不是Image URL。如果你在代碼里面創建一個ImageView(而不是使用LayoutInflater),然后將當前的Activity傳遞給構造函數,而不是application context。
ImageView imageView = new ImageView(getApplicationContext()); // Wrong! ImageView imageView = new ImageView(MyActivity.this); // Correctly ImageView imageView = new ImageView(getActivity()); // Correctly (for Fragments)
2、只有當你想加載ImageView圖片比設備的屏幕尺寸更大(例如,對於后續的縮放操作),那么你才需要在configuration配置maxImageWidthForMemoryCache(…)和maxImageHeightForMemoryCache(…)參數。在其他情況下,你不需要特殊的配置:這些參數是因為需要考慮緩存bitmap時屏幕大小和內存大小。
3、明智地在configuration中設置線程池大小:大池(線程數>10)允許多線程同時運行,這將極大地影響UI響應的速度。但是它可以通過將這些線程的優先級設置為更低解決:當ImageLoader運行以及更多的圖片加載時,低優先級的線程會讓UI更具響應性。UI的相應能力對列表視圖(如ListView、GridView)來說至關重要(如平滑滾動時),所以你應該配置threadPoolSize(...) and threadPriority(...)參數為你的應用程序選一個最優的配置。
4、memoryCacheSize(...) and memoryCache(...)設置有相互重疊的地方。在一個configuration對象中只使用其中一個。
5、discCacheSize(…),discCacheFileCount(…)和discCache(…)設置有相互重疊的地方。在一個configuration對象中只使用其中一個。
6、如果在App中使用ImageLoader你總是或幾乎總要傳遞相同的加載option(DisplayImageOptions)給displayImage(…)方法,然而一個合理的解決方案時在ImageLoader配置中將這些相同的加載選項設置為默認配置(defaultDisplayImageOptions(...) method)。然后在調用displayImage(…)時你就可以不指明這些option。如果options沒有明確傳遞給這些方法,那么這個任務就會使用默認的options。
7、對於FAST 和 MEMORY_SAVING兩種解析類型沒有特別的重大的區別,但是推薦對所有種類的列表視圖(GridView、ListView)使用FAST(當你需要顯示許多小圖片)。為圖片查看器使用MEMORY_SAVING(當你需要顯示大尺寸的圖片時)
參考鏈接: