我将我的应用程序目标sdk更改为api29。突然,我的应用程序在针对api 28时运行良好,并且停止运行。我不知道为什么,所以我认为我应该迁移到androidx。我这样做,然后在运行应用程序时崩溃。我得到了错误
java.lang.IllegalStateException: Cannot invoke observeForever on a background thread
at androidx.lifecycle.LiveData.assertMainThread(LiveData.java:443)
at androidx.lifecycle.LiveData.observeForever(LiveData.java:204)
at co.sentinel.lite.repository.VpnRepository.<init>(VpnRepository.java:74)
at co.sentinel.lite.repository.VpnRepository.getInstance(VpnRepository.java:92)
at co.sentinel.lite.di.InjectorModule.provideVpnRepository(InjectorModule.java:45)
at de.blinkt.openvpn.core.OpenVPNService.disconnectVpnCall(OpenVPNService.java:192)
at de.blinkt.openvpn.core.OpenVPNService.endVpnService(OpenVPNService.java:185)
at de.blinkt.openvpn.core.OpenVPNService.processDied(OpenVPNService.java:178)
at de.blinkt.openvpn.core.OpenVPNThread.run(OpenVPNThread.java:108)
at java.lang.Thread.run(Thread.java:919)
LiveData<List<VpnListEntity>> aVpnListServerData = getVpnListMutableLiveData();
aVpnListServerData.observeForever(vpnList -> {
mAppExecutors.diskIO().execute(() -> {
if (vpnList != null && vpnList.size() > 0) {
List<BookmarkEntity> aBookmarks = mBookmarkDao.getAllBookmarkEntities();
for (int i = 0; i < vpnList.size(); i++) {
vpnList.get(i).setServerSequence(i);
vpnList.get(i).setBookmarked(aBookmarks.contains(new BookmarkEntity(vpnList.get(i).getAccountAddress(), vpnList.get(i).getIp())));
}
mListDao.deleteVpnListEntity();
mListDao.insertVpnListEntity(vpnList);
}
});
});
我了解到我无法从api29中的后台线程观察实时数据,但是我该如何解决呢?