Github 中有许多流行的图像加载器可用于图像加载和缓存以及管理图像请求。
如果Imageview不再附加到窗口,我遇到了这样的要求,请求(批处理和飞行)将被取消。
然而,像Listview和Gridview这样的滚动小部件,Imageview经常从窗口附加和分离,因此队列中的请求分别被取消。
我担心的是他们没有机制来跟踪上述所有库中图像请求的进度。如果分离了Imageview ,则应该根据进度取消请求,如果字节流 a 已经完成了 75% 的工作,那么它不应该被取消,这反过来会减少网络带宽并减少网络调用,因为通常用户总是在滚动小部件中滚动很多,如Listview和Gridview等。
这是我对 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 中非常重要