Gri*_*u47 5 android reactive-programming rx-java android-jobscheduler
我正在使用JobServiceFirebase JobDispatcher (与常规非常相似JobService)创建一个在后台运行并检查服务器上的数据是否已更改(我无法使用推送通知,因为我不拥有该服务器)。
我想知道是否JobService可以在主题的帮助下做出反应:基本上,我将一个单例数据存储库注入到启动 的应用程序类中JobService,该类又通过可以在应用程序中订阅的主题发出新数据班级:
@Inject class DataRepo {
internal val subject = PublishSubject.create<Data>()
// the service should only be started when there are actually subscribers observing the subject
val latestData: Observable<Data> = subject
.doOnSubscribe { jobDispatcher.create(job) }
.doOnDispose { jobDispatcher.cancel(job.tag) }
.share()
val job = JobDispatcher.newJobBuilder()......build()
}
class LoadDataService : JobService() {
@Inject
protected lateinit var dataRepo: DataRepo
private var networkRequest: Disposable? = null
override fun onCreate() {
super.onCreate()
component.inject(this)
}
override fun onStartJob(jobParams: JobParameters): Boolean {
networkRequest = dataRepo.getNewestData()
.subscribe({ newData ->
dataRepo.subject.onNext(newData)
jobFinished(jobParams, false)
}, { error ->
jobFinished(jobParams, true)
})
// job hasn't finished yet. Work is still going on in the background
return true
}
override fun onStopJob(params: JobParameters?): Boolean {
networkRequest?.dispose()
// job was cancelled before jobFinished could be called.
// The job should be retried if possible
return true
}
}
class App {
@Inject val dataRepo: DataRepo
override fun onCreate() {
dataRepo.latestData.subscribe(this::sendNotification)
}
}
Run Code Online (Sandbox Code Playgroud)
问题是,首先,我的发射永远不会到达类中的订阅者App,其次,不能保证设备将唤醒足够长的时间以使所有订阅者完成其工作,因为系统可能会在JobService已打来电话jobFinished()。
| 归档时间: |
|
| 查看次数: |
512 次 |
| 最近记录: |