问题描述
我在某些设备上发现了defaultIfEmpty
的一些怪异行为(不幸的是,我无法在本地复制它……)。
问题是calling database on main thread
,逻辑如下,有一个功能:
private fun doDatabaSEOrEmpty() {
return database.queryDataMaybe()
.defaultIfEmpty(db.createNew())
}
因此,基本上是有一个查询到数据库中的对象,如果它不存在,我们就创建它,就这么简单,然后调用如下:
doDatabaSEOrEmpty()
.subscribeOn(Schedulers.io())
因此,调用预订于io scheduler
的方法,对查询的第一次调用始终在适当的线程上,并且大多数情况下defaultIfEmpty
也是如此,但是在某些情况下会对其进行调用main thread
。
很明显,我可以使用switchIfEmpty
并在内部明确切换调度程序,但是我很好奇这种情况的发生方式和原因。
如果有人有类似的情况并且知道答案,请赐教:)谢谢!
编辑!
结果很简单,defaultIfEmpty
不会从subscribeOn
获取调度程序,而是在调用线程上调用
doDatabaSEOrEmpty()
.subscribeOn(Schedulers.io())
因此,如果它是在主线程defaultIfEmpty
上调用的,则将继续main
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)