WorkManager:无法访问主线程上的数据库,因为它可能长时间锁定UI

时间:2018-10-11 10:04:08

标签: android android-room android-workmanager

使用WorkManager时出现错误。

  

无法访问主线程上的数据库,因为它可能   长时间锁定用户界面。

我的代码

val x = WorkManager.getInstance().getStatusesByTag(vm.workTag)
x.observeForever { } 

如果我不使用方法,请观察所有工作正常

我的日志

Caused by: java.lang.IllegalStateException: Cannot access database on the main thread since it may potentially lock the UI for a long period of time.
at androidx.room.RoomDatabase.assertNotMainThread(RoomDatabase.java:223)
at androidx.room.RoomDatabase.beginTransaction(RoomDatabase.java:269)
at androidx.work.impl.model.WorkSpecDao_Impl$11.compute(WorkSpecDao_Impl.java:928)
at androidx.work.impl.model.WorkSpecDao_Impl$11.compute(WorkSpecDao_Impl.java:914)
at androidx.lifecycle.ComputableLiveData$2.run(ComputableLiveData.java:101)
at androidx.arch.core.executor.testing.InstantTaskExecutorRule$1.executeOnDiskIO(InstantTaskExecutorRule.java:38)
at androidx.arch.core.executor.ArchTaskExecutor.executeOnDiskIO(ArchTaskExecutor.java:96)
at androidx.arch.core.executor.ArchTaskExecutor$2.execute(ArchTaskExecutor.java:53)
at androidx.lifecycle.ComputableLiveData$1.onActive(ComputableLiveData.java:70)
at androidx.lifecycle.LiveData$ObserverWrapper.activeStateChanged(LiveData.java:418)
at androidx.lifecycle.LiveData.observeForever(LiveData.java:214)
at androidx.lifecycle.MediatorLiveData$Source.plug(MediatorLiveData.java:141)
at androidx.lifecycle.MediatorLiveData.onActive(MediatorLiveData.java:118)
at androidx.lifecycle.LiveData$ObserverWrapper.activeStateChanged(LiveData.java:418)
at androidx.lifecycle.LiveData.observeForever(LiveData.java:214)
at org.kadance.ftvideo.view.VideoPlayerActivity.onCreate(VideoPlayerActivity.kt:827)
at android.app.Activity.performCreate(Activity.java:6237)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
at androidx.test.runner.MonitoringInstrumentation.callActivityOnCreate(MonitoringInstrumentation.java:667)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)

1 个答案:

答案 0 :(得分:0)

我运行的Activity投掷测试类具有InstantTaskExecutorRule。

androidTestImplementation'androidx.arch.core:core-testing:2.0.0-beta01'出现此错误。

我从测试类中删除了InstantTaskExecutorRule,并且现在可以正常使用