Android 房间-何时初始化数据库以及如何通过应用程序生命周期访问数据库
我试图将其设置为一种简化对SQLite数据库访问的方法。我已经编写了一些代码,但无法运行,因为应用程序会引发以下异常: 无法访问主线程上的数据库,因为它可能会长时间锁定UI 我做了一些研究,发现在Android 房间-何时初始化数据库以及如何通过应用程序生命周期访问数据库,android,sqlite,android-room,Android,Sqlite,Android Room,我试图将其设置为一种简化对SQLite数据库访问的方法。我已经编写了一些代码,但无法运行,因为应用程序会引发以下异常: 无法访问主线程上的数据库,因为它可能会长时间锁定UI 我做了一些研究,发现在databaseBuilder中.allowMainThreadQueries(),这似乎是一个糟糕的解决方案,因为它就像静音错误消息,而不是修复真正的原因 那么,什么是最佳实践?我应该在什么时候(应用程序生命周期内)创建数据库,并将其存储在哪里,以便我可以从任何我想要的活动中访问它 我应该在什么时候(
databaseBuilder
中.allowMainThreadQueries()
,这似乎是一个糟糕的解决方案,因为它就像静音错误消息,而不是修复真正的原因
那么,什么是最佳实践?我应该在什么时候(应用程序生命周期内)创建数据库,并将其存储在哪里,以便我可以从任何我想要的活动中访问它
我应该在什么时候(应用程序内生命周期)创建数据库
第一次访问时创建RoomDatabase
,就像直接使用SQLiteOpenHelper
一样
我应该把它存放在哪里
单例将是一种典型的模式,就像直接使用SQLiteOpenHelper
时一样
这两个问题都与错误消息无关。这是在后台线程上访问数据库的问题,就像直接使用SQLiteOpenHelper
时一样。对于@Query
方法,您可以选择让该方法返回LiveData
或RxJava类型(例如,Flowable
),在这种情况下,Room将负责在后台线程上执行工作。对于其他操作(例如,@Insert
),您自己负责在后台线程上调用这些方法(thread
,AsyncTask
,ThreadPoolExecutor
,IntentService
,JobIntentService
,等等)