码迷,mamicode.com
首页 > 移动开发 > 详细

Android Universalimageloader 源码分析

时间:2014-10-01 21:32:51      阅读:418      评论:0      收藏:0      [点我收藏+]

标签:android   http   io   os   ar   java   for   sp   2014   

【】带线程安全的单例模式.

bubuko.com,布布扣

 

【】涉及线程安全的函数写法

bubuko.com,布布扣

异步线程下载库源码分析:

【】displayImage

 public void displayImage(String uri, ImageAware imageAware, DisplayImageOptions options,
   ImageLoadingListener listener, ImageLoadingProgressListener progressListener) {
  checkConfiguration();
  if (imageAware == null) {
   throw new IllegalArgumentException(ERROR_WRONG_ARGUMENTS);
  }
  if (listener == null) {
   listener = emptyListener;
  }
  if (options == null) {
   options = configuration.defaultDisplayImageOptions;
  }
  if (TextUtils.isEmpty(uri)) {
   engine.cancelDisplayTaskFor(imageAware);
   listener.onLoadingStarted(uri, imageAware.getWrappedView());
   if (options.shouldShowImageForEmptyUri()) {
    imageAware.setImageDrawable(options.getImageForEmptyUri(configuration.resources));
   } else {
    imageAware.setImageDrawable(null);
   }
   listener.onLoadingComplete(uri, imageAware.getWrappedView(), null);
   return;
  }
  ImageSize targetSize = ImageSizeUtils.defineTargetSizeForView(imageAware, configuration.getMaxImageSize());
  String memoryCacheKey = MemoryCacheUtils.generateKey(uri, targetSize);
  engine.prepareDisplayTaskFor(imageAware, memoryCacheKey);
  listener.onLoadingStarted(uri, imageAware.getWrappedView());
  Bitmap bmp = configuration.memoryCache.get(memoryCacheKey);
  if (bmp != null && !bmp.isRecycled()) {
   L.d(LOG_LOAD_IMAGE_FROM_MEMORY_CACHE, memoryCacheKey);
   if (options.shouldPostProcess()) {
    ImageLoadingInfo imageLoadingInfo = new ImageLoadingInfo(uri, imageAware, targetSize, memoryCacheKey,
      options, listener, progressListener, engine.getLockForUri(uri));
    ProcessAndDisplayImageTask displayTask = new ProcessAndDisplayImageTask(engine, bmp, imageLoadingInfo,
      defineHandler(options));
    if (options.isSyncLoading()) {
     displayTask.run();
    } else {
     engine.submit(displayTask);
    }
   } else {
    options.getDisplayer().display(bmp, imageAware, LoadedFrom.MEMORY_CACHE);
    listener.onLoadingComplete(uri, imageAware.getWrappedView(), bmp);
   }
  } else {
   if (options.shouldShowImageOnLoading()) {
    imageAware.setImageDrawable(options.getImageOnLoading(configuration.resources));
   } else if (options.isResetViewBeforeLoading()) {
    imageAware.setImageDrawable(null);
   }
   ImageLoadingInfo imageLoadingInfo = new ImageLoadingInfo(uri, imageAware, targetSize, memoryCacheKey,
     options, listener, progressListener, engine.getLockForUri(uri));
   LoadAndDisplayImageTask displayTask = new LoadAndDisplayImageTask(engine, imageLoadingInfo,
     defineHandler(options));
   if (options.isSyncLoading()) {
    displayTask.run();
   } else {
    engine.submit(displayTask);
   }
  }
 }

 

【】loadImage

public void loadImage(String uri, ImageSize targetImageSize, DisplayImageOptions options,
   ImageLoadingListener listener, ImageLoadingProgressListener progressListener) {
  checkConfiguration();
  if (targetImageSize == null) {
   targetImageSize = configuration.getMaxImageSize();
  }
  if (options == null) {
   options = configuration.defaultDisplayImageOptions;
  }
  NonViewAware imageAware = new NonViewAware(uri, targetImageSize, ViewScaleType.CROP);
  displayImage(uri, imageAware, options, listener, progressListener);
 }

【】loadImageSync

public Bitmap loadImageSync(String uri, ImageSize targetImageSize, DisplayImageOptions options) {
  if (options == null) {
   options = configuration.defaultDisplayImageOptions;
  }
  options = new DisplayImageOptions.Builder().cloneFrom(options).syncLoading(true).build();
  SyncImageLoadingListener listener = new SyncImageLoadingListener();
  loadImage(uri, targetImageSize, options, listener);
  return listener.getLoadedBitmap();
 }

【】线程池 ExecutorService

 

fdfdf

Android Universalimageloader 源码分析

标签:android   http   io   os   ar   java   for   sp   2014   

原文地址:http://my.oschina.net/hailongqiu/blog/323752

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!