在多个活动中保持可观察对象

时间:2017-02-23 08:19:15

标签: android rx-java mvp rx-android

考虑这种情况:有两个活动,活动A执行网络调用并显示任务计数和活动B从数据库获取任务,或者如果数据不可用则从相同的网络API调用。当A忙于网络呼叫时,用户可以遍历活动B.我使用 Retrofit2 Rxjava2

我的问题是,当活动A正在进行网络呼叫并且用户转到活动B,然后网络呼叫仍在运行时,我想要Observable<>的对象在活动A上创建,也在活动B上创建,因为如果我没有得到回调,则在活动B上进行另一个相同任务的网络调用,这是不可行的。

任何人都知道如何坚持Observable<>的对象在Activity A上创建,通过使用这个可观察对象,我将在Activity A和Activity B上获得回调并执行一些功能。

2 个答案:

答案 0 :(得分:1)

似乎你喜欢的是在后台工作,应用程序的不同部分(Activity)可以访问,在这种情况下,您可能需要考虑使用Android Service
简而言之,从Service创建ActivityA将触发提取数据,然后在ActivityB连接到此Service以获取带有数据的ObservableActivityA

为了保留数据并避免对同一API进行2次调用,您可以使用cache()之类的运算符来组播您的Observable并缓存数据,然后ActivityB可以使用static 1}}。

建议的另一个选项是保留对Observable的{​​{1}}引用或Application级别的引用,该引用可供您的整个应用使用,但之后您应该小心@Blackbelt详述的泄漏。

答案 1 :(得分:0)

  

我的问题是,当活动A正在进行网络呼叫并且用户转到时   活动B,然后网络呼叫仍在运行,

您应该取消订阅观察点以取消网络通话。如果您对其进行了强有力的引用,则会在网络调用运行的时间内泄露活动。你应该解耦这个逻辑

  

我想要的   Observable的对象<>在活动A上创建,也在活动B上创建   因为如果我没有得到回调,那么另一个网络呼叫相同   任务将在活动B上完成,这是不可行的

这是可行的。你可以有一个单例,或者更好地使用Dagger来处理网络调用,并将结果发送到你要订阅的BehaviourSubjectBehaviourSubject的好处是始终会发出最新的值  对新用户。