我目前有一个ListView与自定义适配器,它可以异步获取描述行内容的信息。每行的一部分是一个图像URL,我打算异步下载并显示。ListView异步图像加载策略
我目前的计划为战略,以下载这些图片是:
- 保持软引用的高速缓存下载的位图对象。
- 当调用getView()并且位图位于缓存中时,直接设置ImageView的位图。
- 如果位图不在缓存中,请在下载完成后将其加载到单独的线程中,然后将其添加到缓存并在适配器上调用notifyDataSetChanged()。
我还计划杀死时,活动对象拥有ListView的的onDestroy()未处理的下载 - (甚至在的onPause()或可能 - 法)方法被调用,但最重要的是我要杀死下载当行离开屏幕时,待处理图像的状态。我可能实际上只是在短暂的延迟后取消下载,所以如果行再次快速出现在屏幕上,它可以在不浪费带宽的情况下恢复。
我,不过,我不确定的几件事:
- 什么是当行熄灭屏幕,所以我可以取消下载,以检测的最佳方式?
- 调用notifyDataSetChanged()是下载完成后还是有更好的方法?
对整个策略的任何意见,将不胜感激。
我想到的一个角落案例是,一排可能会离开屏幕,永远不会被重用。然后,我永远不会有机会取消下载。 – JPvdMerwe
相当不可能。这些视图被ListView非常严格地重用......它可能只是“稍微偏离屏幕”(视图在屏幕后移动1像素时不会立即重用),但这实际上可能会使您获得“short延迟“行为是免费的。 –