1

在LoadAndDisplayImageTask类中,有一个名为“checkTaskIsNotActual”的函数。并且有一个注释“如果ImageView被重用于另一个任务,那么当前任务应该被取消”。但我不知道他为什么这样做。找朋友如果知道原因,请告诉我答案。

4

1 回答 1

1

发生这种情况时,您的视图是从适配器生成的。 为了保留内存并提高性能,适配器将为不同的项目重用相同的视图(例如图像视图)(即项目 1 上的 ImageView 与项目 20 中的 ImageView 是相同的内存对象。因此,适配器将只初始化一次 ImageView 对象,并分别更改项目 1 和 20 的 ts 属性。

现在假设您要在 item 1 的 ImageView 中显示 img1.jpg,在 item 20 的 Image view 中显示 img20.jpg。

您的适配器很可能会触发两者的显示图像,但由于它们共享相同的 ImageView(即只有其中一个在屏幕上可见),因此“ checkTaskIsNotActual ”将停止 img1.jpg 在项目 20 处显示,因为当项目 20生成后,ImageView 被复用

我实际上也有这个问题。因为我的列表中有很多项目,其中大多数取消了显示任务,因为图像视图被重用了。结果这对我来说没问题,但似乎存在内存泄漏,并且当尝试使用太多重用视图时,堆将超出预算。

于 2013-06-19T09:10:59.507 回答