Постоянно ли копируется база данных при вызове createFromAssets?
Всем добрый вечер. Подскажите пожалуйста, если я подгружаю БД из ассетов готовую, то она у меня будет каждый раз загружаться от туда при запуске приложения, или после первого запуска она загружается в папку data, и потом подгружается только от туда?
Проблема в том, что если я запускаю приложение, и нажимаю на кнопку, которая запускает инициализацию базы данных, то приложение висит пару секунд, после чего отвисает, и отдает данные. При повторном нажатии кнопки данные загружаются уже быстро.
Обращаюсь к базе данных в IO потоке использую корутины.
Вот мой код..
companion object {
fun init(context: Context) =
Room.databaseBuilder(context, EnemiesDatabase::class.java, "EnemiesDatabase")
.createFromAsset("databases/EnemiesDatabase.db")
.fallbackToDestructiveMigration()
.build()
}
Запрос 1:
fun enemiesFromDb(level: Int, context: Context) {
MainScope().launch {
val repository = EnemiesDbRepository(context)
enemies = repository.getEnemiesListByLevel(level) as MutableList<Enemy>
notifyDataSetChanged()
}
}
Запрос из репозитория:
suspend fun getEnemiesListByLevel(enemyLevel: Int) = withContext(threadIO) {
val list = database.getEnemiesDao().getEnemiesByLevel(enemyLevel)
closeDb()
return@withContext list
}
Ответы (1 шт):
Вопрос решил, бд из ассетов копируется один раз, после чего подгружается из data package. При обновлениях приложения надо настроить миграцию, если БД меняется со временем работы приложения.