当我尝试从协程(为此创建了一个新的)块访问数据库时IllegalStateException
,我的android应用正在生产中崩溃,并带有SQLiteDiskIOException
,SQLiteCantOpenDatabaseException
等不同异常。launch
CoroutineScope
ioCoroutineContext + SupervisorJob()
从这样的launch
块进行数据库访问是否健康?除此之外,由于这是对应用程序中数据库的首次访问,因此它将运行数据库迁移(如果有)。
对于数据库操作,我相信使用带有Default或IO线程的异步模式更好。
例如我正在一个应用程序中,在recyclerview绑定视图持有人中在主线程中以启动模式作为协程进行db sqlite操作,但是通过这样做,我的recycler视图滞后了很多,所以我不使用启动,而是在默认情况下转到异步数据库操作线程,进一步提高了性能。
正如@MarkoTopolnik的Per回答,我完全同意他的观点,在处理sqlite时,您的问题可能是多线程问题,您需要精确地了解事情的实际执行方式。