Universal-Image-Loader完全解析
相信大家平時做Android應用的時候,多少會接觸到非同步載入圖片,或者載入大量圖片的問題,而載入圖片我們常常會遇到許多的問題,比如說圖片的錯亂,OOM等問題,對於新手來說,這些問題解決起來會比較吃力,所以就有很多的開源圖片載入框架應運而生,比較著名的就是Universal-Image-Loader,相信很多朋友都聽過或者使用過這個強大的圖片載入框架,今天這篇文章就是對這個框架的基本介紹以及使用,主要是幫助那些沒有使用過這個框架的朋友們。該專案存在於Github上面,我們可以先看看這個開源庫存在哪些特徵
- 多執行緒下載圖片,圖片可以來源於網路,檔案系統,專案資料夾assets中以及drawable中等
- 支援隨意的配置ImageLoader,例如執行緒池,圖片下載器,記憶體快取策略,硬碟快取策略,圖片顯示選項以及其他的一些配置
- 支援圖片的記憶體快取,檔案系統快取或者SD卡快取
- 支援圖片下載過程的監聽
- 根據控制元件(ImageView)的大小對Bitmap進行裁剪,減少Bitmap佔用過多的記憶體
- 較好的控制圖片的載入過程,例如暫停圖片載入,重新開始載入圖片,一般使用在ListView,GridView中,滑動過程中暫停載入圖片,停止滑動的時候去載入圖片
- 提供在較慢的網路下對圖片進行載入
當然上面列舉的特性可能不全,要想了解一些其他的特性只能通過我們的使用慢慢去發現了,接下來我們就看看這個開源庫的簡單使用吧
新建一個Android專案,下載JAR包新增到工程libs目錄下
新建一個MyApplication繼承Application,並在onCreate()中建立ImageLoader的配置引數,並初始化到ImageLoader中程式碼如下
- package com.example.uil;
- import com.nostra13.universalimageloader.core.ImageLoader;
-
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
- import android.app.Application;
- publicclass MyApplication extends Application {
- @Override
- publicvoid onCreate() {
- super.onCreate();
- //建立預設的ImageLoader配置引數
- ImageLoaderConfiguration configuration = ImageLoaderConfiguration.createDefault(this);
- //Initialize ImageLoader with configuration.
- ImageLoader.getInstance().init(configuration);
- }
- }
ImageLoaderConfiguration是圖片載入器ImageLoader的配置引數,使用了建造者模式,這裡是直接使用了createDefault()方法建立一個預設的ImageLoaderConfiguration,當然我們還可以自己設定ImageLoaderConfiguration,設定如下
- File cacheDir = StorageUtils.getCacheDirectory(context);
- ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context)
- .memoryCacheExtraOptions(480, 800) // default = device screen dimensions
- .diskCacheExtraOptions(480, 800, CompressFormat.JPEG, 75, null)
- .taskExecutor(...)
- .taskExecutorForCachedImages(...)
- .threadPoolSize(3) // default
- .threadPriority(Thread.NORM_PRIORITY - 1) // default
- .tasksProcessingOrder(QueueProcessingType.FIFO) // default
- .denyCacheImageMultipleSizesInMemory()
- .memoryCache(new LruMemoryCache(2 * 1024 * 1024))
- .memoryCacheSize(2 * 1024 * 1024)
- .memoryCacheSizePercentage(13) // default
- .diskCache(new UnlimitedDiscCache(cacheDir)) // default
- .diskCacheSize(50 * 1024 * 1024)
- .diskCacheFileCount(100)
- .diskCacheFileNameGenerator(new HashCodeFileNameGenerator()) // default
- .imageDownloader(new BaseImageDownloader(context)) // default
- .imageDecoder(new BaseImageDecoder()) // default
- .defaultDisplayImageOptions(DisplayImageOptions.createSimple()) // default
- .writeDebugLogs()
- .build();
上面的這些就是所有的選項配置,我們在專案中不需要每一個都自己設定,一般使用createDefault()建立的ImageLoaderConfiguration就能使用,然後呼叫ImageLoader的init()方法將ImageLoaderConfiguration引數傳遞進去,ImageLoader使用單例模式。
配置Android Manifest檔案
- <manifest>
- <uses-permissionandroid:name="android.permission.INTERNET"/>
- <!-- Include next permission if you want to allow UIL to cache images on SD card -->
- <uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
- ...
- <applicationandroid:name="MyApplication">
- ...
- </application>
- </manifest>
接下來我們就可以來載入圖片了,首先我們定義好Activity的佈局檔案
- <?xmlversion="1.0"encoding="utf-8"?>
- <FrameLayoutxmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent">
- <ImageView
- android:layout_gravity="center"
- android:id="@+id/image"
- android:src="@drawable/ic_empty"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"/>
- </FrameLayout>
裡面只有一個ImageView,很簡單,接下來我們就去載入圖片,我們會發現ImageLader提供了幾個圖片載入的方法,主要是這幾個displayImage(), loadImage(),loadImageSync(),loadImageSync()方法是同步的,android4.0有個特性,網路操作不能在主執行緒,所以loadImageSync()方法我們就不去使用
.
loadimage()載入圖片
我們先使用ImageLoader的loadImage()方法來載入網路圖片
- final ImageView mImageView = (ImageView) findViewById(R.id.image);
- String imageUrl = "http://pic36.nipic.com/20131217/6704106_233034463381_2.jpg";
- ImageLoader.getInstance().loadImage(imageUrl, new ImageLoadingListener() {
- @Override
- publicvoid onLoadingStarted(String imageUri, View view) {
- }
- @Override
- publicvoid onLoadingFailed(String imageUri, View view,
- FailReason failReason) {
- }
- @Override
- publicvoid onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
- mImageView.setImageBitmap(loadedImage);
- }
- @Override
- publicvoid onLoadingCancelled(String imageUri, View view) {
- }
- });
- final ImageView mImageView = (ImageView) findViewById(R.id.image);
- String imageUrl = "http://pic36.nipic.com/20131217/6704106_233034463381_2.jpg";
- ImageLoader.getInstance().loadImage(imageUrl, new SimpleImageLoadingListener(){
- @Override
- publicvoid onLoadingComplete(String imageUri, View view,
- Bitmap loadedImage) {
- super.onLoadingComplete(imageUri, view, loadedImage);
- mImageView.setImageBitmap(loadedImage);
- }
- });
- final ImageView mImageView = (ImageView) findViewById(R.id.image);
-
相關推薦
Android 開源框架Universal-Image-Loader完全解析(一)--- 基本介紹及使用
大家好!差不多兩個來月沒有寫文章了,前段時間也是在忙換工作的事,準備筆試面試什麼的事情,現在新工作找好了,新工作自己也比較滿意,唯一遺憾的就是自己要去一個新的城市,新的環境新的開始,希望自己能儘快的適應新環境,現在在準備交接的事情,自己也有一些時間了,所以就繼續給大家分享And
Universal-Image-Loader完全解析
相信大家平時做Android應用的時候,多少會接觸到非同步載入圖片,或者載入大量圖片的問題,而載入圖片我們常常會遇到許多的問題,比如說圖片的錯亂,OOM等問題,對於新手來說,這些問題解決起來會比較吃力,所以就有很多的開源圖片載入框架應運而生,比較著名的就是Univer
Android 開源框架Universal-Image-Loader完全解析(二)--- 圖片快取策略詳解
本篇文章繼續為大家介紹Universal-Image-Loader這個開源的圖片載入框架,介紹的是圖片快取策略方面的,如果大家對這個開源框架的使用還不瞭解,大家可以看看我之前寫的一篇文章Android 開源框架Universal-Image-Loader完全解析(一)---
史上最全Universal-Image-Loader原始碼解析————核心程式碼篇
背景 接著上一篇的內容,我們接著看ImageLoader的核心程式碼篇,上一篇主要是看ImageLoader的記憶體優化,主要包括磁碟快取和記憶體快取,還有就是記憶體的快取策略,這一篇,我們重點來看一下ImageLoader是如何使用這些記憶體和進行圖片的
史上最全Universal-Image-Loader原始碼解析————快取篇
背景 在我寫下這篇部落格的時候,我還是一名二本學校計算機專業大四的應屆畢業生,自學Android開發快兩年了,這兩年的時間裡面,其實真的是感慨萬千,兩年的時間裡面,Android的很多事情也都見識過了,其實Android對於新手入門在就業方面是相當不友好的事情。都說第一個吃螃蟹的人最
深入解析開源專案之Universal-Image-Loader(二)快取篇
Universal-Image-Loader 是一個優秀的圖片載入開源專案,Github地址在 (Github地址) ,很多童鞋都在自己的專案中用到了。優秀的專案從來都是把簡單留給開發者,把複雜封裝在框架內部。ImageLoader作為Github上S
安卓圖片外掛Universal-Image-Loader解析
連結地址 https://www.cnblogs.com/tianzhijiexian/p/4034215.html http
Android 使用圖片異步載入框架Universal Image Loader的問題
loader mar fill splay con iss text blog option 使用的Jar包 問題: optionsm = new DisplayImageOptions.Builder() .displayer(new
(轉) Universal-Image-Loader使用大全(史上最屌)
pools 設置 raw 到你 eight cti option 項目目錄 proc 轉載自http://blog.csdn.net/zenjj11/article/details/38728481 項目介紹: Android上最讓人頭疼的莫過於從網
開源項目Universal Image Loader for Android 說明文檔 (1) 簡單介紹
bst 成功 開源 ica ctu structure 使用 說明 由於 When developing applications for Android, one often facesthe problem of displa
Android-Universal-Image-Loader三大組件DisplayImageOptions、ImageLoader、ImageLoaderConfiguration詳解
根據 GridView ESS ted activit close except spa mat Android-Universal-Image-Loader三大組件DisplayImageOptions、ImageLoader、ImageLoaderConfigurati
Android中使用Universal-Image-Loader圖片快取
ImageLoader 是最早開源的 Android 圖片快取庫, 強大的快取機制, 早期被廣泛 Android 應用使用, 至今仍然有很多 Android 開發者在使用。 GitHub地址:
Universal-Image-Loader的封裝
Universal Image Loade介紹 UIL有很多的優點高度的可定製性,是我使用最多的圖片載入框架,今天就來整理下它的使用以及封裝的方法。 Features: Multithread image loading (async or sync) Wide
Universal Image Loader for Android一些方法的引數
DisplayImageOptions options = new DisplayImageOptions.Builder() // 設定圖片在下載期間顯示的圖片 .showImageOnLoading(R.drawable.ic_launcher)/
universal image loader downlaod from https with post method
Map<String, String> headers = new HashMap<String, String>(); headers.put(“key”, Commons.CURRENT_ACTIVE_PROFILE.getKey()); headers.put(“se
Android Universal Image Loader學習筆記
2、整個UIL庫分為ImageLoaderEngine,Cache及ImageDownloader,BitmapDisplayer,Bitmapprocessor ~流程:ImageLoader收到載入及顯示的任務,並將它交給ImageLoaderEngi
Universal image loader遇到OOM
Universal image loader應該不用介紹了,大家應該都很熟悉了,但是近來在使用時候遇到了OOM,呼叫棧如下: 07-24 13:01:24.876 31362 31362 E AndroidRuntime: java.lang.OutOfMemoryErro
Universal-Image-Loader圖片非同步載入類庫
這是 一個開源的Android關於下載顯示圖片的工具類,在這個下載包裡面jar檔案,用於我們匯入專案使用,具體使用方法在包裡面也含有。下面是一個例子: 雙擊程式碼複製 1 2 <uses-permissionandroid:name="android.pe
android Universal-Image-Loader
一、介紹 (一)、概要: Android-Universal-Image-Loader是一個開源的UI元件程式,該專案的目的是實現可重複使用的非同步影象載入、快取和顯示。所以,如果你的程式裡需要這個功能的話,使用它,因為已經封裝
Android載入圖片 Universal-Image-Loader圖片快取問題
開發中大部分情況下我們需要快取圖片,用imageLoader兩步實現載入網路圖片後,快取到記憶體以及sd卡.再次讀取該圖片時先從記憶體找,有則直接載入,沒有則從sd卡找,再沒有則讀網路,這樣實現了三級快取. 1.初始化配置,ImageLoader是單例模式,