在我的应用程序关闭后执行 RxAndroid Observables
Executing RxAndroid Observables after my application is closed
是否可以在 Android 应用程序关闭后保留我的 Observable 运行?
在我的示例中,我必须以 10 秒的间隔发送用户的位置。我最初认为订阅 Schedulers.newThread()
可以解决问题,但是,每当我关闭应用程序时,进程就会停止。有什么办法可以用 RxAndroid?
这是我使用的方法:
private void startShiftLocationUpdater() {
Observable.interval(10, TimeUnit.SECONDS)
.flatMap(l -> shouldSendLocation())
.takeWhile(shouldSend -> shouldSend)
.flatMap(shouldSend -> initUpdateLocationShift())
.subscribeOn(Schedulers.newThread())
.subscribe(s -> {
repository.updateShift(s);
Log.i("ShiftUpdate", "Shift updated successfully");
}, Crashlytics::logException, () ->
Log.i("ShiftUpdate", "Shift updated completed")
);
}
您可以使用 services to continue executing code in background and wakelocks,但我必须按照您的描述做类似的事情,并且发现如果 android 系统需要空闲内存,服务可以随时终止。
我找到的解决方案是使用 alarms,如果您安排警报,无论您的应用程序是否仍在执行,都会触发此警报。这样,即使系统由于缺乏资源而终止了应用程序,我的应用程序也可以获得设备位置。这是我发现在这种情况下唯一有效的解决方案。
我在一些 google i/o 中想到了这个想法,当时他们说如果您真的需要您的应用程序继续运行,无论您应该使用警报而不是服务。
我遇到的唯一问题是,在某些特定的华为设备上,必须在创建后 5 分钟之前执行的警报会在 5 分钟后触发,而不是在您设置的时间触发。所以,我最终做了一个涉及服务和警报的解决方案。这样,如果服务是 运行,当警报到达时,服务将停止并重新启动并检索位置。在特定的华为设备中,该服务始终执行发送位置,但如果由于某种原因该应用程序被终止,警报将在不到 5 分钟内恢复所有内容。
那时候我还没有用Rx,那是很久以前的事了,使用alarms是不丢失任何路线的解决方案。我们的应用程序被广泛使用,我不说名字只是因为我不想在这里发垃圾信息。
希望我能把这个报警问题解释清楚。如果您需要更多信息,请询问。
是否可以在 Android 应用程序关闭后保留我的 Observable 运行?
在我的示例中,我必须以 10 秒的间隔发送用户的位置。我最初认为订阅 Schedulers.newThread()
可以解决问题,但是,每当我关闭应用程序时,进程就会停止。有什么办法可以用 RxAndroid?
这是我使用的方法:
private void startShiftLocationUpdater() {
Observable.interval(10, TimeUnit.SECONDS)
.flatMap(l -> shouldSendLocation())
.takeWhile(shouldSend -> shouldSend)
.flatMap(shouldSend -> initUpdateLocationShift())
.subscribeOn(Schedulers.newThread())
.subscribe(s -> {
repository.updateShift(s);
Log.i("ShiftUpdate", "Shift updated successfully");
}, Crashlytics::logException, () ->
Log.i("ShiftUpdate", "Shift updated completed")
);
}
您可以使用 services to continue executing code in background and wakelocks,但我必须按照您的描述做类似的事情,并且发现如果 android 系统需要空闲内存,服务可以随时终止。
我找到的解决方案是使用 alarms,如果您安排警报,无论您的应用程序是否仍在执行,都会触发此警报。这样,即使系统由于缺乏资源而终止了应用程序,我的应用程序也可以获得设备位置。这是我发现在这种情况下唯一有效的解决方案。
我在一些 google i/o 中想到了这个想法,当时他们说如果您真的需要您的应用程序继续运行,无论您应该使用警报而不是服务。
我遇到的唯一问题是,在某些特定的华为设备上,必须在创建后 5 分钟之前执行的警报会在 5 分钟后触发,而不是在您设置的时间触发。所以,我最终做了一个涉及服务和警报的解决方案。这样,如果服务是 运行,当警报到达时,服务将停止并重新启动并检索位置。在特定的华为设备中,该服务始终执行发送位置,但如果由于某种原因该应用程序被终止,警报将在不到 5 分钟内恢复所有内容。
那时候我还没有用Rx,那是很久以前的事了,使用alarms是不丢失任何路线的解决方案。我们的应用程序被广泛使用,我不说名字只是因为我不想在这里发垃圾信息。
希望我能把这个报警问题解释清楚。如果您需要更多信息,请询问。