我已经阅读了以下article,它解释了listView的工作原理,如果在lruCache / diskCache中找不到位图,有时视图会启动asyncTask线程。但后来这种观点得到了回收。因此,当asyncTask完成时,它如何知道要填充哪个视图?你有没有一个简单的示例项目可以指导我?
答案 0 :(得分:0)
异步任务总是尝试填充您作为参数提供的视图。因此,当屏幕方向改变并且活动被重新创建时,任务可能会或可能不会完成解码位图(取决于您读取turorial的距离),但它不会显示图像。一旦活动重新创建,将启动新的异步任务以加载图像。
答案 1 :(得分:0)
回收的视图仍在那里(因为它被回收)。只要您不告诉AsyncTask它不应该填充到现在回收的视图,它就会在视图中显示错误的图像。
您需要使用取消机制来实现AsyncTask,该机制会通知AsyncTask它不应再填充(或者您对任务中的视图的引用为空,并在那里检查为null)。
Picasso是一个图像加载库,它有一种方法可以在您创建新请求时取消预览视图请求,这基本上是在列表视图中滚动并且视图被回收时发生的情况。