[セットトップ]Android_オープンフレーム_Android Universal ImageLoaderネットワーク画像のロード


このブログは子墨のオリジナルです.転載は出典を明記してください.
http://blog.csdn.net/zimo2013/article/details/9901833
1.機能概要
 Android-Universal-Ingel-loaderは、非同期画像のローディング、キャッシュ、表示を繰り返すことができるデバイスを提供することを目的とするオープンソースUIコンポーネントプログラムです.
(1)マルチスレッドを使って画像をロードする(2).スレッド数、キャッシュ方式、画像表示オプションなど、ImageLoaderの基本パラメータを柔軟に構成する.(3)画像非同期キャッシュ機構は、メモリキャッシュ及びSDCardキャッシュを含む.(4)モニターによる画像ロードプロセス及び対応イベントの処理を監督する.(5)ロードされた画像表示オプションを設定します.たとえば、画像の円角処理やグラデーションアニメーションなどです.
2.簡単実現
ImageLoaderは一例の設計モードを採用し、ImageLoader mageLoader=ImageLoader.get Instance()このオブジェクトを得ると、ImageLoader毎に単一の例の設計モードを採用し、ImageLoaderはinit()メソッドを呼び出して初期化を完了しなければならない.
//	1.  ImageLoaderConfiguration   
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(this)
    .memoryCacheExtraOptions(480, 800) 			// default = device screen dimensions
    .discCacheExtraOptions(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
    .discCache(new UnlimitedDiscCache(cacheDir))// default
    .discCacheSize(50 * 1024 * 1024)		//     
    .discCacheFileCount(100)				//       
    .discCacheFileNameGenerator(new HashCodeFileNameGenerator()) // default
    .imageDownloader(new BaseImageDownloader(context)) // default
    .imageDecoder(new BaseImageDecoder()) // default
    .defaultDisplayImageOptions(DisplayImageOptions.createSimple()) // default
    .writeDebugLogs()
    .build();

//	2.  ImageLoader     
ImageLoader imageLoader = ImageLoader.getInstance();
imageLoader.init(config);

//	3.DisplayImageOptions       
// 		        displayImage()  ,  loadImage()  
DisplayImageOptions options = new DisplayImageOptions.Builder()
	.showStubImage(R.drawable.ic_stub)			// image      ,     
	.showImageForEmptyUri(R.drawable.ic_empty)	// empty URI      
	.showImageOnFail(R.drawable.ic_error)		//            
	.resetViewBeforeLoading(false)  // default
	.delayBeforeLoading(1000)
	.cacheInMemory(false) 			// default       
	.cacheOnDisc(false) 			// default       SDCard
	.preProcessor(...)
	.postProcessor(...)
	.extraForDownloader(...)
	.imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2)// default
	.bitmapConfig(Bitmap.Config.ARGB_8888) 				// default
	.decodingOptions(...)
	.displayer(new SimpleBitmapDisplayer()) // default       ,        
	.handler(new Handler())								// default
	.build();
	
//	4    
//	4.1   displayImage
imageLoader.displayImage(
	uri, 		/*
					String imageUri = "http://site.com/image.png"; 		// from Web
					String imageUri = "file:///mnt/sdcard/image.png";	// from SD card
					String imageUri = "content://media/external/audio/albumart/13"; // from content provider
					String imageUri = "assets://image.png"; 			// from assets
					*/
	imageView, 		//    imageView  
	options);		//      image      

//	4.2   loadImage
//		    DisplayImageOptions         
imageLoader.loadImage(
		uri, 
		options, 
		new MyImageListener());	//ImageLoadingListener
class MyImageListener extends SimpleImageLoadingListener{

	@Override
	public void onLoadingStarted(String imageUri, View view) {
		imageView.setImageResource(R.drawable.loading);
		super.onLoadingStarted(imageUri, view);
	}

	@Override
	public void onLoadingFailed(String imageUri, View view,
			FailReason failReason) {
		imageView.setImageResource(R.drawable.no_pic);
		super.onLoadingFailed(imageUri, view, failReason);
	}

	@Override
	public void onLoadingComplete(String imageUri, View view,
			Bitmap loadedImage) {
		imageView.setImageBitmap(loadedImage);
		super.onLoadingComplete(imageUri, view, loadedImage);
	}

	@Override
	public void onLoadingCancelled(String imageUri, View view) {
		imageView.setImageResource(R.drawable.cancel);
		super.onLoadingCancelled(imageUri, view);
	}
	
}
3.サポートのゆり
String imageUri = "http://site.com/image.png"; 		// from Web
String imageUri = "file:///mnt/sdcard/image.png"; 	// from SD card
String imageUri = "content://media/external/audio/albumart/13"; // from content provider
String imageUri = "assets://image.png"; 			// from assets
String imageUri = "drawable://" + R.drawable.image; // from drawables (only images, non-9patch)
drawablesの下の画像をロードすると、ImageView.setImageResource(…)によって上のImageLoaderを通過するのではなく、ImageView.
4.携帯に緩衝する
デフォルトではキャッシュを保存できません.次のように指定しなければなりません.
DisplayImageOptions options = new DisplayImageOptions.Builder()
        ...
        .cacheInMemory(true)
        .cacheOnDisc(true)
        ...
        .build();
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(getApplicationContext())
        ...
        .defaultDisplayImageOptions(options)
        ...
        .build();
ImageLoader.getInstance().init(config); // Do it on Application start

ImageLoader.getInstance().displayImage(imageUrl, imageView); 	/*
											   defaultDisplayImageOptions   options  ,      options   */
または次のような方法で
DisplayImageOptions options = new DisplayImageOptions.Builder()
        ...
        .cacheInMemory(true)
        .cacheOnDisc(true)
        ...
        .build();
ImageLoader.getInstance().displayImage(imageUrl, imageView, options); //    options  
キャッシュは外部設定でデータを書き込む必要がありますので、以下のパーミッションを追加する必要があります.
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
5.OutOfMemoryError
OutOfMemoryErrorエラーがよくある場合は、(1)を以下のように設定します.configrationの中線プログラムのスレッド数を減らすことができます.(.threadPoolSize).1-5(2)を推奨します.display optionsを通過します.bitmapConfig.RGBu 565を設定します.565 consume 2 times less memory than in ARGB_8888.(3).configrationを使用したmemoryCache(new WeakMemoryCache()メソッドまたは呼び出しなし.cacheInMemory(4).display options経由.image Scape Type(ImagescaleType.INuSAMPLEuINT)またはimationを使用した.8888 Bitmapオブジェクト
6.メモリキャッシュ管理
携帯電話のメモリキャッシュは、イメージLoader Configration.memoryCache([new Lru MemoryCache(1)))によって管理されています.
LruMemoryCache
API>=9デフォルト.it is moved to the head of a queue.
FreqLimited MemoryCache
キャッシュサイズを超えると、最近頻繁に使われているbitmapを削除します.
LRU Limited MemoryCache
API<9デフォルト.キャッシュサイズを超えると、最近使用されているbitmapが削除されます.
FIFO Limited MemoryCache
FIFO rule is used for deletion when cache size limit is exceed
Larget Limited MemoryCache
The larget Bitmap is deleted when cache size limit is exceedd
WeakMemoryCache
Unimited cache
7.SDcardキャッシュ管理
SDカードキャッシュは、イメージLoader Configration.discCache([new TotalSize LimitedDiscCache()]))によって管理されています.
UnimitedDisc Cache
default The fastest cache,doesn't limit cache size
TotalSize LimitedDiscCache
Cache limited by total cache size.If cache size exceeds specified limit then file with themost oldest lastusage date will be deleted
FileCount Limited DiscCache
Cache limited by file count.If file count in cache directory exceeds specifed limit then file with the most oldest last usage date will be deleted.
LimitedAgeDisc Cache
Size-unlimited cache with limited files'lifetime.If age of cached file exceeds defined limit then it will be deleted from cache.
Unimited Disc Cache is 30%-faster than other limited disc cache implements.