Android Kotlin:在App类中定义一个协同路由范围
在Android Kotlin:在App类中定义一个协同路由范围,android,kotlin,kotlinx.coroutines,Android,Kotlin,Kotlinx.coroutines,在App类中声明一个协同程序作用域而不是使用Globascope,这是一个好的实践吗 class App : Application() { val applicationJob = Job() companion object { lateinit var instance: App private set lateinit var appDefaultScope: CoroutineScope }
App
类中声明一个协同程序作用域而不是使用Globascope,这是一个好的实践吗
class App : Application() {
val applicationJob = Job()
companion object {
lateinit var instance: App
private set
lateinit var appDefaultScope: CoroutineScope
}
override fun onCreate() {
super.onCreate()
instance = this@App
appDefaultScope = CoroutineScope(Dispatchers.Default + applicationJob)
}
}
在这里,我定义了一个变量appDefaultScope
,并在应用程序的onCreate
因此,在我的代码中的任何地方,我都可以:
App.appDefaultScope.launch {
// some operations
}
我看到的与GlobalScope的主要区别是,在这里,我总是可以取消作业并关闭所有可能卡住的协程
有更好的替代方案吗?
原因是我有一些object
函数,它们使用协程,并且不是从活动中调用的(因此我无法为它们提供在活动中定义的范围),但它们的操作需要一个范围。
此类对象函数的一个示例是在本地数据库上写入的日志,该数据库几乎可以在应用程序中的任何地方调用。我喜欢您的方法,因为我的应用程序的某些部分也没有专门绑定到特定的ViewModel/Activity/Fragment。不要忘记取消
onTerminate
中的applicationJob
,生产设备中未调用@Seven onTerminate()。