Android 在多个活动中持久化可观察对象
考虑这个场景:有两个活动:活动A执行网络调用并显示任务计数,活动B从数据库获取任务,或者如果数据不可用,则从同一网络API调用获取任务。当A在网络呼叫中忙时,用户可以遍历到活动B。我正在使用2和Rxjava2 我的问题是,当活动A正在进行网络调用,用户转到活动B时,网络调用仍在运行,我希望在活动A上创建Observable对象,也在活动B上创建Observable对象,因为如果我没有得到回调,那么将在活动B上执行同一任务的另一个网络调用,这是不可行的 任何人都知道我如何持久化在活动A上创建的可观察对象,通过使用这个可观察对象,我将得到活动A和活动B的回调,并执行一些功能 我的问题是,活动A何时进行网络呼叫,用户何时转到 活动B,此时网络呼叫仍在运行 您应该取消订阅observable以取消网络呼叫。如果保留对它的强引用,则在网络调用运行时将泄漏该活动。你应该把这个逻辑解耦 我想要这个 在活动A和活动B上创建的可观察对象 因为若我并没有收到回拨,那个么另一个网络呼叫也会收到同样的回拨 任务将在不可行的活动B上完成 这是可行的。您可以使用一个singleton,或者更好地使用Android 在多个活动中持久化可观察对象,android,rx-java,mvp,rx-android,Android,Rx Java,Mvp,Rx Android,考虑这个场景:有两个活动:活动A执行网络调用并显示任务计数,活动B从数据库获取任务,或者如果数据不可用,则从同一网络API调用获取任务。当A在网络呼叫中忙时,用户可以遍历到活动B。我正在使用2和Rxjava2 我的问题是,当活动A正在进行网络调用,用户转到活动B时,网络调用仍在运行,我希望在活动A上创建Observable对象,也在活动B上创建Observable对象,因为如果我没有得到回调,那么将在活动B上执行同一任务的另一个网络调用,这是不可行的 任何人都知道我如何持久化在活动A上创建的可观
Dagger
来处理网络调用,并将结果发送到您将订阅的Behavior Subject
。behavior subject
的好处在于始终会发出最新的值
对于新的订阅服务器, 似乎你喜欢在后台进行工作,这将对你的应用程序的不同部分(<代码>活动< /代码>)访问,在这种情况下,你可能需要考虑使用Android <代码>服务< /代码>。 简而言之,从
ActivityA
创建一个服务
,该服务将触发获取数据,然后在ActivityB
中连接到此服务
以获取一个可观察的,其中包含在ActivityA
中获取的数据
为了持久化数据并避免对同一API进行两次调用,您可以使用诸如cache()
之类的操作符来多播您的Observable
并缓存数据,然后它也可以用于ActivityB
建议的另一个选项是保持对可观察的的静态
引用或对应用程序
级别的引用,这将适用于您的整个应用程序,但是您应该小心@Blackbelt详述的泄漏