我正在尝试提出一种使用RxJava
. 入门的东西很容易与RxJava
和MVP
架构,但是,我挣扎了一下在服务器上更新的东西。一个简单的例子是“用户更改了他们的个人资料,我需要将它保存到服务器”。以前,我很可能会创建一个AsyncTask
来处理PUT
对服务器的请求,或者我会使用 OkHttp 回调功能。
在新世界中,我正在考虑使用Service
或者可能是一个Singleton
类来向用户发送此类更新。这个想法是确保订阅不是 UI 生命周期的一部分。我已经Service
定义并处理了应用程序中的一些内容,因此将其扩展为调度用户配置文件更新之类的内容不会有太多工作。我有点挣扎的部分是我在哪里保存我的disposable
s 以及什么时候取消订阅?
我真的没有任何代码可以共享,但是假设我有一个名为的类UserDispatcher
,它提供了以下方法:
public Observable<User> dispatchUserUpdate(@NonNull User user) {
return mRepository
.updateUserProfile(user)
.subscribeOn(mSchedulerProvider.io())
.observeOn(mSchedulerProvider.ui());
}
UserDispatcher
目前在 my 中创建Service
。因此 Observable 返回到Service
并在 中订阅Service
(但这可能是错误的)。
Reactive 世界中的取消订阅不应与非 Reactive 世界不同。所以考虑应该是相同的Service
,而不是Activity
像你所说的那样,Service
生命周期与 UI 无关,因此它的生命周期非常简单(开始/停止)。
所以你需要在 Service 中保留你的订阅,它是发送 的那个Observable
,并在onDestroy
回调中取消订阅。
关于服务的生命周期,取消订阅仅适用于您的Observable
任务尚未完成且您不想泄漏资源的情况。但是,正常的路径是,您需要Service
在Observable
完成后停止。
您应该在这里使用一个已启动的服务(不是绑定的),该服务将一直保持活动状态,直到您将其停止(或系统将其杀死以获取资源),因此在您分派 之后它不会自行停止Observable
,您应该负责停止更新Observable
完成后。
一般来说,Singleton
不推荐使用,因为它不是Android系统组件,因此Android无法像Service
. 诸如在工作尚未完成时重新安排、在系统即将终止Service
等时收到通知之类的事情……
至于Service
,从Lollipop
现在起也不再推荐这样做,因为我们现在有了JobScheduler
API,因为系统更加严格关于后台处理(或其他支持旧 Android 版本的 API,如 Firebase JobDispatcher)。
但它不应该有太大的不同,JobScheduler
例如在API 中,你有onStopJob
你应该取消订阅的事件。
作业调度程序生命周期
关于与 的生命周期JobScheduler
,它具有相同的模式,当Observable
任务完成时,您应该调用jobFinished()向系统发出您的工作已完成的信号(JobScheduler
使用 Service 来完成实际工作)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句