在“ListAdapter”或“RecyclerView.ViewHolder”做繁重的工作?

Posted

技术标签:

【中文标题】在“ListAdapter”或“RecyclerView.ViewHolder”做繁重的工作?【英文标题】:Doing heavy work in "ListAdapter" or "RecyclerView.ViewHolder"? 【发布时间】:2021-09-05 15:49:51 【问题描述】:

我的 android 应用中有两个类。

TestListAdapter 扩展了 ListAdapter

TestViewHolder 扩展 RecyclerView.ViewHolder

我的问题是,我是否应该做繁重的任务,例如在“TestListAdapteronBindViewHolder() 方法或“TestViewHolder”绑定方法中的特殊距离计算或字符串处理(s)?

从性能的角度来看,哪个更好还是无关紧要?

问候

【问题讨论】:

【参考方案1】:

您真正繁重的任务(下载、文件加载和处理)应该在另一个线程中运行,因为您应该通过 LoadManager 启动 AsyncLoaderTask 并等待 ListAdapter 中通知 RecyclerView 项目已更新的结果。

LoadManager 还具有生存生命周期的好处,因此您可以在恢复状态时更改方向并将侦听器附加到正在运行的负载管理器,并等待任务完成而无需重新启动。

【讨论】:

感谢您的回复 :) 如何寻找更小的计算?因为那样的话 LoaderManager 会有点太多的开销 如果您没有看到在主线程中运行这些影响,因此您应该在适配器调用 onBindViewHolder 时将代码移动到 ViewHolder,如果计算是永久性的,请考虑在您的模型中创建一个 var保存通过 recyclerview 回收视图时的值

以上是关于在“ListAdapter”或“RecyclerView.ViewHolder”做繁重的工作?的主要内容,如果未能解决你的问题,请参考以下文章

ListAdapter 过滤器不是使用字符串吗?

将图像 url 设置为 listadapter 以使用 Picasso 显示图像

将图片网址设置为listadapter以使用Picasso显示图片

在 Fragment 中设置一个新的 ListAdapter

使用 ListAdapter 将项目添加到 ListView

在没有唯一标识符的项目上使用“ListAdapter”areItemsTheSame