Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/186.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在多个活动中持久化可观察对象_Android_Rx Java_Mvp_Rx Android - Fatal编程技术网

Android 在多个活动中持久化可观察对象

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上创建的可观

考虑这个场景:有两个活动:活动A执行网络调用并显示任务计数,活动B从数据库获取任务,或者如果数据不可用,则从同一网络API调用获取任务。当A在网络呼叫中忙时,用户可以遍历到活动B。我正在使用2Rxjava2

我的问题是,当活动A正在进行网络调用,用户转到活动B时,网络调用仍在运行,我希望在活动A上创建Observable对象,也在活动B上创建Observable对象,因为如果我没有得到回调,那么将在活动B上执行同一任务的另一个网络调用,这是不可行的

任何人都知道我如何持久化在活动A上创建的可观察对象,通过使用这个可观察对象,我将得到活动A和活动B的回调,并执行一些功能

我的问题是,活动A何时进行网络呼叫,用户何时转到 活动B,此时网络呼叫仍在运行

您应该取消订阅observable以取消网络呼叫。如果保留对它的强引用,则在网络调用运行时将泄漏该活动。你应该把这个逻辑解耦

我想要这个 在活动A和活动B上创建的可观察对象 因为若我并没有收到回拨,那个么另一个网络呼叫也会收到同样的回拨 任务将在不可行的活动B上完成

这是可行的。您可以使用一个singleton,或者更好地使用
Dagger
来处理网络调用,并将结果发送到您将订阅的
Behavior Subject
behavior subject
的好处在于始终会发出最新的值
对于新的订阅服务器,

似乎你喜欢在后台进行工作,这将对你的应用程序的不同部分(<代码>活动< /代码>)访问,在这种情况下,你可能需要考虑使用Android <代码>服务< /代码>。 简而言之,从
ActivityA
创建一个
服务
,该服务将触发获取数据,然后在
ActivityB
中连接到此
服务
以获取一个
可观察的
,其中包含在
ActivityA
中获取的数据

为了持久化数据并避免对同一API进行两次调用,您可以使用诸如
cache()
之类的操作符来多播您的
Observable
并缓存数据,然后它也可以用于
ActivityB

建议的另一个选项是保持对
可观察的
静态
引用或对
应用程序
级别的引用,这将适用于您的整个应用程序,但是您应该小心@Blackbelt详述的泄漏