Android convertView,用还是不用?

标签 android listview android-listview

文章中Multithreading For Performance来自Android Developer Blog,在Adapter.getItem()中使用convertView来显示通过HttpRequest.Yet下载的ImageView列表,我还看到一些 Android 教程不使用 convertView,只是在 Adapter.getItem() 中扩充一个新 View 。

我想知道使用 convertView 有什么好处?它如何回收使用过的 View ?使用的 View 缓存在哪里?

我问这个问题是因为我没有在我的项目中使用convertView,我想知道不使用它的成本。下面是我对图像 ListView 的实现。

我没有使用 convertView,而是在 Adapter.getItem() 中扩充了一个新 View 。此外,我创建了一个包装类来保存 listView 的每个项目中的员工。下载图像后,它将作为位图存储在每个列表项的包装类中(图像很小)。这样我就可以避免重复下载同一张图片。这也避免了 Multithreading For Performance 中讨论的竞争条件问题。 .但是还是有点担心,用我的方法会不会有什么不好的地方?


仅供引用:@Carl Anderson 推荐的文章详细介绍了 convertView 如何在适配器中工作。本文中推荐的 Romain Guy 的 Google IO 是另一个很好的引用。

总之,使用 convertView 是空间和时间上的优化。此外,我已经放弃了自己的 imageDownloader 并使用@CommonsWare 推荐的 Picasso。它就像一个魅力。

最佳答案

不重复使用 convertView 的问题是,正如您所说,每次用户滚动一行时,您都在创建和膨胀一个新的 View进入视野。与重用现有 View 相比,创建和扩充 View 需要花费大量时间,而且您肯定会为此付出性能损失。

我的应用程序做了类似的事情 - 它在 ListView 的行内使用 ImageView,这些 ImageView 由在后台下载的图像填充。作为我对线程错误调查的一部分,我关闭了 View 的重用,当我这样做时,性能非常糟糕。 ListView 代码针对 View 重用进行了优化,如果您不坚持这一点,您的帧率和可用性将会受到影响。

阅读此链接还帮助我更好地理解了 ListView 的工作原理: http://lucasr.org/2012/04/05/performance-tips-for-androids-listview/

关于Android convertView,用还是不用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23375997/

相关文章:

java - 区分 Recyclerview 点击中的列

android - 如何同步协程?

c# - WPF Listview 组 header 不显示 : Any Ideas?

android - 我的应用程序中的致命异常

android - 如何从 Android L Preview Design 制作 Android List View Design

android - 如何在单击 ListView 中的按钮时取消选中所有列表项

java - 如何在 CollapsingToolbarLayout 内设置 Toolbar 的重力?

android - 允许访问 Android 应用程序中授予的文件后,登录按钮不起作用

java - 设置项目单击监听器事件没有受到影响吗?

android - 在 Android 中单击适配器中的按钮时,无法刷新从 JSON 获取数据的 ListView