【发布时间】:2025-12-11 22:00:02
【问题描述】:
我有一种情况,如果我不取消我的父活动(显示回收器)视图中的协程,一旦我开始我的子活动,它可能会导致崩溃。协程打开一个 SQL 数据库并获取 recyclerview 的数据。我实现如下:
protected val coroutineMarkerSup = SupervisorJob()
protected val myMarkerSQLScope = CoroutineScope(Dispatchers.Main + coroutineMarkerSup)
fun doSomething() {
myMarkerSQLScope.launch {
val user = withContext(Dispatchers.IO){
doSomehingInTheBackGround()//gets the SQL database
}
//Any code here is blocked till doSomethingInTheBackGround is finished
finalTaskOnceCoroutineFinished()
}
}
fun finalTaskOnceCoroutineFinished() {
//recyclerView.adapter = adapter
adapter.notifyDataSetChanged()//refresh recyclerview
}
@CallSuper
override fun onPause() {
super.onPause()
coroutineMarkerSup.cancel()
}
然后,一旦我在子活动中进行了会影响父活动的更改,我将重新启动父活动中的协程,如下所示。
override fun onRestart() {
super.onRestart()
coroutineMarkerSup.start()
doSomething()
}
如果我将一个活动返回到父级的父级并再次转发,回收器视图会显示更新的内容。
所以,为了解决这个问题,我在 onPause() 中注释掉了 coroutineMarkerSup.cancel() 行,它工作正常,但我担心应用程序崩溃。
那么不取消 coroutineMarkerSup 是否可以,或者有没有我忽略的正确方法。
【问题讨论】:
标签: android-studio kotlin android-recyclerview kotlinx.coroutines