kotlin - 不断调用 recylerview notifyDataSetChanged 块 UI
问题描述
我正在开发聊天应用程序。我正在使用这个SoketLib库进行套接字发送和接收。现在,在发送消息后,我必须更新聊天列表。现在消息发送/接收频率/速度太高了。就像用户连续打字一样。所以这些列表操作会使整个屏幕在一段时间后变得很慢。我已经详细调试了我的套接字代码。所以这不是套接字问题。它只是不断调用recylerview的notifyDataSetChanged()方法。
messagesAdapter?.notifyDataSetChanged()
if (messagesAdapter != null)
rvMessages?.scrollToPosition(messagesAdapter?.itemCount?.minus(1)!!)
为此,我也使用了 DiffUtil 但它也重现了相同的行为
fun notifyChanges(oldList: List<AllMessages>, newList: List<AllMessages>) {
val diff = DiffUtil.calculateDiff(object : DiffUtil.Callback() {
override fun areItemsTheSame(oldItemPosition: Int, newItemPosition: Int): Boolean {
return oldList[oldItemPosition].getChatId() == newList[newItemPosition].getChatId()
}
override fun areContentsTheSame(oldItemPosition: Int, newItemPosition: Int): Boolean {
return oldList[oldItemPosition] == newList[newItemPosition]
}
override fun getOldListSize() = oldList.size
override fun getNewListSize() = newList.size
})
rvMessages?.recycledViewPool?.clear()
messagesAdapter?.let { diff.dispatchUpdatesTo(it) }
// moveToBottom(2)
}
任何帮助,将不胜感激。
解决方案
推荐阅读
- c++ - c ++ fstream当在文件中看到字符串时
- javascript - 第一次尝试firebase云功能
- python - 使用 SciPy 进行插值
- ckeditor - CKeditor 4 禁用亵渎过滤器
- oracle - 使用 %found 和 %notfound
- java - 为什么 Locale(String) 构造函数在 Java 中不能正常工作?
- android - 无法获取未知属性“navigationVersion”
- ios - iOS TextField - 自动完成添加空白字符
- java - 如何将依赖项注入 Spark main 方法?
- regex - 如何使用 QRegExp 和 QString 获取图像标签的 src