Coroutine scope on Application class android

NO , GlobalScope will NOT be suitable for Application instance.

As mention here in this article here:


There are multiple reasons why you shouldn’t use GlobalScope:

  • Promotes hard-coding values.
    It might be tempting to hardcode Dispatchers if you use GlobalScope straight-away. That’s a bad practice!

  • It makes testing very hard.
    As your code is going to be executed in an uncontrolled scope, you won’t be able to manage execution of work started by it.

  • You can’t have a common CoroutineContext for all coroutines
    built into the scope as we did with the applicationScope. Instead, you’d have to pass a common CoroutineContext to all coroutines started by GlobalScope.


So, one solution for this is to create your own scope like this: val applicationScope = CoroutineScope(SupervisorJob() + Dispatchers.Main) But better yet, as pointed out by @Raman in the comments, use the equivalent that’s already available to you:

kotlinx.coroutines.MainScope()

We don’t need to cancel this scope since we want it to remain active as long as
the application process is alive, so we don’t hold a reference to the SupervisorJob.
We can use this scope to run coroutines that need a longer lifetime than the calling
scope might offer in our app.

Leave a Comment

Hata!: SQLSTATE[HY000] [1045] Access denied for user 'divattrend_liink'@'localhost' (using password: YES)