¿Es una buena práctica declarar un alcance coroutine dentro de la clase de la App
en lugar de usar un 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) } }
Aquí definí una variable appDefaultScope
y la inicialicé en onCreate
de la aplicación
Entonces, en cualquier parte de mi código, siempre podría hacer:
App.appDefaultScope.launch { // some operations }
La principal diferencia con un GlobalScope que veo es que aquí siempre puedo cancelar el trabajo y cerrar todas las corrutinas potencialmente atascadas.
¿Hay mejores alternativas a esto?
La razón es que tengo algunas funciones de object
que usan rutinas y no se llaman desde una actividad (entonces no puedo proporcionarles un alcance definido dentro de la actividad) pero necesito un alcance para sus operaciones. Un ejemplo de dicha función de objeto es un registro que escribe en una base de datos local a la que se puede llamar en casi cualquier parte de la aplicación.