Glide的源码分析(三)

发布时间:2019-11-19 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了Glide的源码分析(三)脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

Glide取消图片加载
1.在任务开始时;
2.在EngineJob中,Future.cancel(true)
3.在加载完成,但没有加载到控件;
RequestManager.java:

     public void pauseRequests() {         Util.assertMainThread();         requestTracker.pauseRequests();     }

RequestTracker.java:

     public void pauseRequests() {         isPaused = true;         for (Request request : Util.getSnapshot(requests)) {             if (request.isRunning()) {                 request.pause();                 PEndingRequests.add(request);             }         }     }

GenericRequest.java:

    @override     public void pause() {         clear();         status = Status.PAUSED;     }

GenericRequest.Loadstatus.java:

    public void cancel() {             engineJob.removeCallback(cb);     }

EngineJob.java:

     public void removeCallback(ResourceCallback cb) {         Util.assertMainThread();         if (hasResource || hasException) {             addIgnoredCallback(cb);         } else {             cbs.remove(cb);             if (cbs.iSEMpty()) {                 cancel();             }         }     }     void cancel() {         if (hasException || hasResource || isCancelled) {             return;         }         engineRunnable.cancel();         Future currentFuture = future;         if (currentFuture != null) {             currentFuture.cancel(true);         }         isCancelled = true;         listener.onEngineJobCancelled(this, key);     }

EngineRunnable.java:

     public void cancel() {         isCancelled = true;         decodeJob.cancel();     }

EngineRunnable.java:

    @Override     public void run() {         if (isCancelled) {             return;         }          Exception exception = null;         Resource<?> resource = null;         try {             resource = decode();         } catch (Exception e) {             if (Log.isLoggable(TAG, Log.VERBOSE)) {                 Log.v(TAG, "Exception decoding", e);             }             exception = e;         }          if (isCancelled) {             if (resource != null) {                 resource.recycle();             }             return;         }          if (resource == null) {             onLoadFailed(exception);         } else {             onLoadComplete(resource);         }     }

EngineJob.java:

    PRivate volatile Future<?> future;     void cancel() {         if (hasException || hasResource || isCancelled) {             return;         }         engineRunnable.cancel();         Future currentFuture = future;         if (currentFuture != null) {             currentFuture.cancel(true);         }         isCancelled = true;         listener.onEngineJobCancelled(this, key);     }
    public void start(EngineRunnable engineRunnable) {         this.engineRunnable = engineRunnable;         future = diskCacheService.submit(engineRunnable);     }      @Override     public void submitForSource(EngineRunnable runnable) {         future = sourceService.submit(runnable);     }

脚本宝典总结

以上是脚本宝典为你收集整理的Glide的源码分析(三)全部内容,希望文章能够帮你解决Glide的源码分析(三)所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。