В общем, я бы справился с этим, воспользовавшись поддержкой Room для заполнения базы данных из ресурса. Это относительно недавнее дополнение к API комнаты, и оно должно быть быстрее, чем у вас.
Игнорируя это, вам нужно будет передать что-то в ваш DatabaseCallback
конструктор (например, тип функции), который мог бы быть вызванным из вашей функции onCreate()
, когда ваша работа будет завершена. Независимо от того, что создает вашу базу данных (например, хранилище), этот параметр конструктора будет DatabaseCallback
и иметь дело с результатом.
Так, например, ваш конструктор может быть:
private class DatabaseCallback(
private val context: Context,
private val scope: CoroutineScope,
private val onDone: () -> Unit
)
... и onCreate()
может вызвать onDone()
после вставки всех записей. Или onDone
может быть Channel
, в котором вы offer()
получите результат. Кто бы ни создавал DatabaseCallback
, он предоставил бы лямбда-выражение или Channel
или что-то еще, а затем использовал его, чтобы узнать, когда работа будет завершена.