我需要从后台线程访问listview的适配器
Posted
技术标签:
【中文标题】我需要从后台线程访问listview的适配器【英文标题】:I need to access adapter of listview from a background thread 【发布时间】:2020-04-18 13:17:01 【问题描述】:我正在开发一个聊天应用程序,正如标题所说,我想从后台线程访问 adapter
或 ListView
以向其中添加新元素(消息)而不创建新的 ListView
和适配器实例因为这会导致刷新ListView
并在用户观看底部的最后一条消息时再次向上滚动,如果我尝试从我的聊天活动中将我的适配器设置为static
,它会告诉我它可能会导致内存泄漏,因为适配器正在使用上下文。
1- 有没有办法通过从我的后台线程创建一个新实例来更新ListView
适配器,而无需在更新或删除我之前的ListView
消息时滚动回第一个?
2- 如果不是,那么如果我尝试在适配器中使用getApplicationContext()
以免导致泄漏,它会正常工作吗?因为从这个主题我读到应用程序上下文不会膨胀布局
https://www.aurigait.com/blog/Best+practices-of-appropriate-Context-in-android/
【问题讨论】:
为什么不切换回主线程?例如View.post(Runnable) 我实际上是这样做的,因为我必须这样做才能访问 UI 元素并将 Chat.adapter.add() 调用放入其中,但正如您所见,适配器是静态的。 【参考方案1】:为什么不将 RecyclerView 与 ListAdapter 一起使用?
https://developer.android.com/reference/androidx/recyclerview/widget/ListAdapter
【讨论】:
【参考方案2】:我想到了一个使用静态适配器的想法,并在它被销毁时从我的聊天活动中删除它的引用,这样它就不会导致泄漏。
【讨论】:
以上是关于我需要从后台线程访问listview的适配器的主要内容,如果未能解决你的问题,请参考以下文章
从后台线程访问 [UIApplication sharedApplication] 可以吗?
Android,ListView IllegalStateException:“适配器的内容已更改但ListView没有收到通知”