3

Github 中有许多流行的图像加载器可用于图像加载和缓存以及管理图像请求。

  1. 通用图像加载器
  2. 排球
  3. 毕加索
  4. 壁画(增加了增强

如果Imageview不再附加到窗口,我遇到了这样的要求,请求(批处理和飞行)将被取消。

然而,像ListviewGridview这样的滚动小部件,Imageview经常从窗口附加和分离,因此队列中的请求分别被取消。

我担心的是他们没有机制来跟踪上述所有库中图像请求的进度。如果分离了Imageview ,则应该根据进度取消请求,如果字节流 a 已经完成了 75% 的工作,那么它不应该被取消,这反过来会减少网络带宽并减少网络调用,因为通常用户总是在滚动小部件中滚动很多,如ListviewGridview等。

这是我对 Volley 的理解:

public boolean removeContainerAndCancelIfNecessary(ImageContainer container) {

    /* logic to check progress of Request */
    mContainers.remove(container);
    if (mContainers.size() == 0) {

        mRequest.cancel();
        return true;
    }
    return false;
}

这是我对毕加索的理解:

private void cancelExistingRequest(Object target) {

    checkMain();
    Action action = targetToAction.remove(target);
    if (action != null) {

        action.cancel();
        dispatcher.dispatchCancel(action);
    }
    if (target instanceof ImageView) {

        ImageView targetImageView = (ImageView) target;
        DeferredRequestCreator deferredRequestCreator = targetToDeferredRequestCreator.remove(targetImageView);
        if (deferredRequestCreator != null) {

            deferredRequestCreator.cancel();
        }
    }
}

以下是我对 Universal Image Loader 的理解: 我不认为 Universal Image loader 允许取消内联请求。

void cancelDisplayTaskFor(ImageAware imageAware) {

    cacheKeysForImageAwares.remove(imageAware.getId());
} 

请让我知道仅针对网络请求解决它的可能性。如果图像已经被缓存,那么我们将取消请求。

电池性能在 Android 中非常重要

4

1 回答 1

2

我不能说 Volley 和 Picasso,但我可以说 UIL 是如何工作的。

UIL 在任务处理过程中不断检查 ImageView。如果任务变为非实际(ImageView 被回收(重用)或被 GC 收集),则 UIL 停止此 ImageView 的任务。

如果下载图像时任务变得不实际怎么办?如果下载的图像数据少于 75%,UIL 会中止下载。如果超过 75% - 则 UIL 完成下载(即 UIL 将图像文件缓存在磁盘缓存中)然后取消任务。

于 2014-11-26T16:33:10.257 回答