考虑这种情况:有两个活动,活动A执行网络调用并显示任务计数和活动B从数据库获取任务,或者如果数据不可用则从相同的网络API调用。当A忙于网络呼叫时,用户可以遍历活动B.我使用 Retrofit2 和 Rxjava2 。
我的问题是,当活动A正在进行网络呼叫并且用户转到活动B,然后网络呼叫仍在运行时,我想要Observable<>的对象在活动A上创建,也在活动B上创建,因为如果我没有得到回调,则在活动B上进行另一个相同任务的网络调用,这是不可行的。
任何人都知道如何坚持Observable<>的对象在Activity A上创建,通过使用这个可观察对象,我将在Activity A和Activity B上获得回调并执行一些功能。
答案 0 :(得分:1)
似乎你喜欢的是在后台工作,应用程序的不同部分(Activity
)可以访问,在这种情况下,您可能需要考虑使用Android Service
。
简而言之,从Service
创建ActivityA
将触发提取数据,然后在ActivityB
连接到此Service
以获取带有数据的Observable
在ActivityA
。
为了保留数据并避免对同一API进行2次调用,您可以使用cache()
之类的运算符来组播您的Observable
并缓存数据,然后ActivityB
可以使用static
1}}。
建议的另一个选项是保留对Observable
的{{1}}引用或Application
级别的引用,该引用可供您的整个应用使用,但之后您应该小心@Blackbelt详述的泄漏。
答案 1 :(得分:0)
我的问题是,当活动A正在进行网络呼叫并且用户转到时 活动B,然后网络呼叫仍在运行,
您应该取消订阅观察点以取消网络通话。如果您对其进行了强有力的引用,则会在网络调用运行的时间内泄露活动。你应该解耦这个逻辑
我想要的 Observable的对象<>在活动A上创建,也在活动B上创建 因为如果我没有得到回调,那么另一个网络呼叫相同 任务将在活动B上完成,这是不可行的
这是可行的。你可以有一个单例,或者更好地使用Dagger
来处理网络调用,并将结果发送到你要订阅的BehaviourSubject
。 BehaviourSubject
的好处是始终会发出最新的值
对新用户。