Is it safe to launch a coroutine in SmartLifecycle?

Viewed 68

Is it safe to launch a coroutine in a SmartLifecycle?

I need to use CoroutineCrudRepository within an initializer on the very first startup like the following, but I am unsure about the implications as using GlobalScope is marked as a delicate API:

@Component
class Initializer(val configRepo: ConfigRepository) : SmartLifecycle {

  private var running = false

  override fun start() {
    running = true
    GlobalScope.launch {
      val initialized = configRepo.findByKey(ConfigKey.INITIALIZED)
      if (initialized == null) {
        // very first run
        // ... do some stuff ...
        val c = Config(key = ConfigKey.INITIALIZED, value = "1")
        configRepo.save(c)
      }
      running = false
    }
  }

  override fun stop() {
  }

  override fun isRunning(): Boolean = running
}

From what I understood there is no possibility to stop the coroutine and I cannot implement stop(). But my guess was that this is ok-ish during startup, because startup either fails and the complete application is shutdown (hence the coroutine would stop consuming resources) or the application starts up fine and I at least can indicate the isRunning from within the coroutine.

I would assume the configRepo to work fine, but I do not fully understand what would happen if the coroutine would get stuck.

0 Answers
Related