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()。