打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
【Android】Fresco图片加载框架(二)
 public DiskCacheProducer(          BufferedDiskCache defaultBufferedDiskCache,          BufferedDiskCache smallImageBufferedDiskCache,          CacheKeyFactory cacheKeyFactory,          Producer<EncodedImage> inputProducer) {    mDefaultBufferedDiskCache = defaultBufferedDiskCache;    mSmallImageBufferedDiskCache = smallImageBufferedDiskCache;    mCacheKeyFactory = cacheKeyFactory;    mInputProducer = inputProducer;  }  public void produceResults(          final Consumer<EncodedImage> consumer,          final ProducerContext producerContext) {    ImageRequest imageRequest = producerContext.getImageRequest();//如果diskcache disabled的话,那么直接执行maybeStartInputProducer    if (!imageRequest.isDiskCacheEnabled()) {      maybeStartInputProducer(consumer, consumer, producerContext);      return;    }    final ProducerListener listener = producerContext.getListener();    final String requestId = producerContext.getId();    listener.onProducerStart(requestId, PRODUCER_NAME);    final CacheKey cacheKey = mCacheKeyFactory.getEncodedCacheKey(imageRequest);    final BufferedDiskCache cache =            imageRequest.getImageType() == ImageRequest.ImageType.SMALL                    ? mSmallImageBufferedDiskCache                    : mDefaultBufferedDiskCache;    Continuation<EncodedImage, Void> continuation = new Continuation<EncodedImage, Void>() {      //回调      @Override      public Void then(Task<EncodedImage> task)              throws Exception {        //根据task是canceled,fault等状态决定如何执行        if (task.isCancelled() ||                (task.isFaulted() && task.getError() instanceof CancellationException)) {          listener.onProducerFinishWithCancellation(requestId, PRODUCER_NAME, null);          consumer.onCancellation();        } else if (task.isFaulted()) {          listener.onProducerFinishWithFailure(requestId, PRODUCER_NAME, task.getError(), null);          //出错了,就调用maybeStartInputProducer          maybeStartInputProducer(                  consumer,                  new DiskCacheConsumer(consumer, cache, cacheKey),                  producerContext);        } else {          EncodedImage cachedReference = task.getResult();          if (cachedReference != null) {            listener.onProducerFinishWithSuccess(                    requestId,                    PRODUCER_NAME,                    getExtraMap(listener, requestId, true));            consumer.onProgressUpdate(1);            consumer.onNewResult(cachedReference, true);            cachedReference.close();          } else {            //没有结果,就调用maybeStartInputProducer            listener.onProducerFinishWithSuccess(                    requestId,                    PRODUCER_NAME,                    getExtraMap(listener, requestId, false));            maybeStartInputProducer(                    consumer,                    new DiskCacheConsumer(consumer, cache, cacheKey),                    producerContext);          }        }        return null;      }    };    AtomicBoolean isCancelled = new AtomicBoolean(false);    final Task<EncodedImage> diskCacheLookupTask =            cache.get(cacheKey, isCancelled);//执行task,task其实就是从缓存中取结果,执行后,前面的continuation就会被回调    diskCacheLookupTask.continueWith(continuation);    subscribeTaskForRequestCancellation(isCancelled, producerContext);  }  //调用mInputProducer的produceResults   private void maybeStartInputProducer(          Consumer<EncodedImage> consumerOfDiskCacheProducer,          Consumer<EncodedImage> consumerOfInputProducer,          ProducerContext producerContext) {    if (producerContext.getLowestPermittedRequestLevel().getValue() >=            ImageRequest.RequestLevel.DISK_CACHE.getValue()) {      consumerOfDiskCacheProducer.onNewResult(null, true);      return;    }    mInputProducer.produceResults(consumerOfInputProducer, producerContext);  }
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
VB Winsock控件的使用与介绍
[真题备考] 雅思真题解析-剑7Test1写作Task1解析
——unit 2 task
Shanghai center to showcase robots
GRS唛头标签
Unit 2 Let's play sports Task: I ...
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服