Android Universalimageloader 源码分析

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

 

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

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

【】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

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。