使用 in flight observable 加入 rxjava 订阅的正确方法

correct way to join an rxjava subscription with in flight observable

我有一个方法 getData() returns 一个 Observable。

public Observable<Data> getData() {
  Observable<Data> observable = mApi.networkCall();
  return observable;
}

有很多客户端调用此方法,如果 observable 尚未完成,我希望他们只订阅 in flight observable。如果 observable 已经完成,我需要重新启动调用并获得一个新的 observable。检测可观察对象完成的最佳方法是什么,我应该再次调用网络调用吗?

使用.share()。第一个订阅启动可观察对象,后续订阅者将收到相同的发射。一旦流终止,所有当前订阅者都将无效,下一个订阅将再次启动可观察对象。

public Observable<Data> getData() {
  return mApi.networkCall().share();
}

请注意,我只希望 getData() 被调用一次并重用返回的可观察对象。如果不是这种情况,我们会确保 getData() 返回一个单例。