如何在 RecyclerViewCursorAdapter 中运行 CoroutineScope 在 bindCursor 内的 ViewHolder{}

问题描述

注意:我已经在 RecyclerViewCursorAdapter 中实现了 Coroutine Single Scope,但是当我将其更改为 runBlocking 时应用程序变得太慢了,它工作正常

有没有办法在每次滚动时在 bindCursor{} 内的 ViewHolder 中执行 Coroutinescope 而不会影响性能? 我需要在每次滚动时从数据库执行多个查询并相应地更新 UI。

解决方法

我很确定,有比在适配器中做更好的方法来做你正在做的事情。我不认为这是正确的,也许您可​​以通过接口或其他方式使用回调。

但是回到您的问题,您应该可以轻松地使用 lifeCycleScope

为每个 Lifecycle 对象定义了 LifecycleScope。当生命周期被销毁时,在此范围内启动的任何协程都会被取消。

由于您没有提到它是您正在使用的活动还是片段,但两者的逻辑和功能保持不变。我要给你举个例子 Fragment

class MyFragment: Fragment() {
    override fun onViewCreated(view: View,savedInstanceState: Bundle?) {
        super.onViewCreated(view,savedInstanceState)
        viewLifecycleOwner.lifecycleScope.launch {
            // Do stuff here
        }
    }
}

就像您可以启动协程并按照生命周期进行处理一样,您可能需要将 viewLifeCycleOwner 传递给您的 Fragment,尽管正如我所说,不推荐这样做,您最好使用接口排序,然后在 Fragment 本身中计算,但您可以理解。