Kotlin: определите область сопрограммы в классе App - PullRequest
0 голосов
/ 30 января 2019

Является ли хорошей практикой объявлять область сопрограммы внутри класса 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 и инициализировал ее в * 1006 приложения.*

Так что в любом месте моего кода я всегда мог сделать:

App.appDefaultScope.launch {
   // some operations
}

Основное отличие от GlobalScope, которое я вижу, состоит в том, что здесь я всегда могу отменить работу и закрыть все потенциально застрявшиесопрограммы.

Есть ли лучшие альтернативы этому?

Причина в том, что у меня есть некоторые object функции, которые используют сопрограммы и не вызываются из операции (тогда я не могу предоставить им область, определенную внутри действия), но мне нужна область для их операций.Примером такой объектной функции является журнал, который записывает данные в локальную базу данных, которую можно вызывать практически везде в приложении.

...