Как правильно инициализировать базу данных в корутине?

Есть база данных, которую мне нужно инициализировать и сразу закрыть. Я решил это делать в LaunchActivity, которая будет выводить на экран лого приложения + прогресс бар. Инициализирую через корутину, но будет ли это корректно работать и будет ли ожидание завершения работы с базой данных, прежде чем стартанет мэйн активити?

Launch activity

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        viewModelProvider.get(LaunchActivityViewModel::class.java)
            .launchDatabaseOneTime(applicationContext)
        startMainActivity()
    }

ViewModel

fun launchDatabaseOneTime(context: Context) {

        EnemiesDbRepository(context).apply {
            initDatabaseInLaunchActivity()
        }
    }

Repository

fun initDatabaseInLaunchActivity() {
        CoroutineScope(Dispatchers.Main + job).launch {
            withContext(Dispatchers.IO) {
                database = EnemiesDatabase.initSecond(context)
                closeDb()
            }
            job.join()
        }
    }

Не уверен, что правильно с джойнами работаю. Хотелось бы не блокировать главный поток при загрузке, что бы корректно работал програсс бар.


Ответы (0 шт):