美文网首页
room 数据库初始化细节

room 数据库初始化细节

作者: 吉凶以情迁 | 来源:发表于2022-04-11 09:00 被阅读0次

Room

   AppDatabase database = AppDatabase.getInstance(this, new AppExecutors());
            TemplateDao templeteDao = database.templeteDao();
            List<PrintTemplate> printTemplates = templeteDao.queryTemplateByField("title", "Box");//不查询就不触发自动,真贱
            Log.w(TAG,"PrintTemplate:"+printTemplates);//这里不能关闭数据库,否则将无法正常初始化。

如果在application的初始化中直接close,那么也会导致初始化失败,初始化的地方是回调。

 private static AppDatabase buildDatabase(final Context appContext,
            final AppExecutors executors) {
        return Room.databaseBuilder(appContext, AppDatabase.class, DATABASE_NAME)
                .allowMainThreadQueries()//允许主线程查询
                .setJournalMode(JournalMode.WRITE_AHEAD_LOGGING)
                .addCallback(new Callback() {
                    @Override
                    public void onCreate(@NonNull SupportSQLiteDatabase db) {
                        super.onCreate(db);
                        executors.diskIO().execute(() -> {
                            // Add a delay to simulate a long-running operation 添加延迟以模拟长时间运行的操作

                            if(BuildConfig.DEBUG){
                                Log.w("Appdatabase","DATABASE_INIT");
                            }
                            // Generate the data for pre-population 生成预人口数据
                            AppDatabase database = AppDatabase.getInstance(appContext, executors);
                            List<PrintTemplate> templeteEntries = DataGenerator.generateTempletes();
                            insertData(database, templeteEntries);
                            // notify that the database was created and it's ready to be used MutableLiveData flag=true
                            database.setDatabaseCreated();

                        });
                    }
                })
            .addMigrations(MIGRATION_1_2)//迁移
            .build();
    }

如上可以看到是在

 .addCallback(new Callback() {
                    @Override
                    public void onCreate(@NonNull SupportSQLiteDatabase db) {

里面触发的,但是关闭就会导致初始化基本上失败的,关闭了还不影响我查询操作,但是初始化失败的,关于该不该关闭的问题网上也有各种说法,

相关文章

网友评论

      本文标题:room 数据库初始化细节

      本文链接:https://www.haomeiwen.com/subject/tihisrtx.html