在我的Android应用中,我使用BehaviorSubject从数据提供程序获取数据并将其传递给UI和其他需要数据的服务。为了举例说明,我们假设这些是用户的消息。
每当触发数据(例如消息)的刷新时,数据提供程序将执行“长时间运行”(也称为“慢速”)网络调用以检索消息,并通过调用主体的onNext(data)
操作将它们馈送到主题中,从而将更新“广播”到UI和其他订阅者。
这个方法很有效,但是我在主体的初始化方面遇到了问题,或者换句话说,我在应用程序启动时设置主体的初始值时遇到了问题。
我知道我可以通过BehaviorSubject.create(initialValue)
设置初始值,但由于initialValue是网络调用的结果,因此这会阻塞主体的初始化。
以下是我在数据提供程序的初始化中所做的内容:
BehaviorSubject<Data> subject = BehaviorSubject.create();
getDataFromNetwork().subscribe(data -> subject.onNext(data));
getDataFromNetwork()
返回网络调用结果的一个 Observable。
问题: 手动将刷新自网络的 observable 与 BehaviourSubject 进行连接,似乎有些不够优雅。有没有更好的方法来使用另一个 Observable 初始化一个 BehaviourSubject?
我想到了这样一种方式:
BehaviorSubject.create(Observable obs)
或者在我的情况下是 BehaviourSubject.create(getDataFromNetwork())
,它可以设置 subject,使其保持为空,直到 Observable 发出一些东西,然后将此东西“推送”给其订阅者。
getDataFromNetwork()
正在为它们“提供”数据,但也许你的问题是想要定时重新执行网络查询?如果是这样的话,你是在什么条件下执行这个操作的? - Gluck