在Dispatchers.Main上启动协程时滞后

时间:2020-06-13 09:39:34

标签: android kotlin android-livedata kotlin-coroutines

ViewModel.kt

private val viewModelJob = Job()
private val defaultScope = CoroutineScope(Dispatchers.Default + viewModelJob)

fun sort() {

    defaultScope.launch {

        // sort logic (on tempList)

        Log.d("my_tag", "Sort time: " + (System.currentTimeMillis() - sortStart))

        withContext(Dispatchers.Main) {
            Log.d("my_tag", "Updating sorted list")
            sortedItemList.value = tempList
        }
    }
}

sortedItemList是viewModel中的MutableLiveData,它在活动中被观察,该活动随后打印日志并使用该列表设置回收者视图。但是,每当我打开活动时,在设置回收者视图时都会看到80 - 300ms的滞后,这非常明显。这是我的日志:

2020-06-13 14:46:41.031 22004-22066 D/my_tag: Sort time: 19
2020-06-13 14:46:41.324 22004-22004 D/my_tag: Updating sorted list
2020-06-13 14:46:41.324 22004-22004 D/my_tag: Observe sorted list

我认为这种滞后是因为Dispatchers.Main仅由当时可能正在做其他事情的主线程组成。是不是而且,我应该如何消除这种滞后,或者对此有一个更快的解决方法?谢谢。

0 个答案:

没有答案