У меня есть SQLite база данных, небольшого размера ( ~ 4 МБ ), но содержащая ~ 50.000 строк .БД только для запроса, никаких манипуляций с данными.
Постоянство помещения Библиотека используется для управления извлечением данных
То, что работает годами - это следующее
@Database(entities = {all_my_entities},version = my_version)
public abstract class IbDatabase extends RoomDatabase {
private static MyDatabase instance = null;
public static synchronized MyDatabase getInstance(Context context){
if(isFirstTime()) {
try {
context.openOrCreateDatabase("dbname",0, null);
File dbPath = context.getDatabasePath("dbname");
InputStream myInput = context.getAssets().open("dbassetname");
OutputStream myOutput = new FileOutputStream(dbPath);
// ... read and write ...
// ... close the stream
setIsFristTimeFalse();
} catch (Exception e) {
//...
}
}
if(instance == null){
try {
instance = Room.databaseBuilder(context.getApplicationContext(),
MyDatabase.class, "dbname" )
.allowMainThreadQueries()
// .addCallback(roomCallback)
.build();
} catch (java.lang.IllegalStateException e){
//...
}
}
return instance;
}
Теперь, на устройствах Pixel 2,3 с Android 9 (и, насколько мне известно, только на тех), это не работаетбольше .Когда запрос выполняется, он выдает ошибку «таблица не найдена».
Рабочим решением является помещение всех вставок SQL в обратный вызов onCreate, но это занимает ~ 10 секунд, а копирование двоичного файла занимает <<1 с </p>
Есть ли надежный способ скопировать двоичный файл или хотя бы сократить время начальной загрузки ?
Спасибо за помощь