在写入期间,会议室数据库读取被阻止。 (同时读写)

时间:2019-01-08 08:49:48

标签: android multithreading kotlin android-room disk-io

我遇到一个ROOM问题,我正在同时写作和阅读,并且在写作过程中,阅读部分被阻塞或非常缓慢。

这是我的体系结构:

  • 所有磁盘I / O均在单线程执行器上执行。
  • 一个工人同步数据(写入)
  • 一个向用户显示数据的活动(如果存在,则从Room中检索数据,否则将创建空视图(TextView,Radio,CheckBox,DropDown等...))

如果没有任何同步,则直接显示活动,如果有同步,则来自DB的数据。  如果正在进行同步,需要进行大量书写,则活动太长而无法显示(20到60秒)。.

我已将“日志”模式设置为RoomDatabase.JournalMode.WRITE_AHEAD_LOGGING,但仍然相同。

总结一下:

  • 活动->服务->数据库
  • 不同步:直接结果
  • 正在进行同步:以下行已从服务类别中屏蔽。

//在执行器下面,正在从Room中读取一些DISK。但是由于有一些写作,因此被屏蔽了……不知道为什么。

Executors.newSingleThreadExecutor().execute {// DISK READING....}

编写部分由多个线程执行,Worker使用此Executors.newFixedThreadPool(3)调用网络服务, 并将网络结果传递到另一个服务(diskIO),以在Room中处理和保存数据。

读写数据库是否有任何限制?我的意思是,如果线程太多,会不会有问题? (我尝试了一个连接网络和数据库的线程,但仍然是同一问题。)

0 个答案:

没有答案