在应用程序关闭后执行RxAndroid观察

在应用程序关闭后执行RxAndroid观察,android,rx-java,background-process,rx-android,Android,Rx Java,Background Process,Rx Android,在Android应用程序关闭后,是否可以保持我的Observable运行 在我的示例中,我必须以10秒的间隔发送用户的位置。我最初认为订阅Schedulers.newThread()就可以了,但是,每当我关闭应用程序时,进程就会停止。我能用RxAndroid做这个吗 以下是我使用的方法: private void startShiftLocationUpdater() { Observable.interval(10, TimeUnit.SECONDS) .fl

在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")
            );
}
您可以使用继续在后台执行代码,但我必须按照您的描述做类似的事情,并发现如果android系统需要空闲内存,服务随时可能被终止

我发现的解决方案是使用,如果您计划报警,无论您的应用程序是否仍在执行,都会触发此报警。这样,即使系统因资源不足而关闭了应用程序,我的应用程序也可以获得设备位置。这是我发现的唯一在这种情况下有效的解决方案

我在一些谷歌i/o中想到了这个想法,当时他们说,如果你真的需要你的应用程序继续运行,不管你应该使用什么警报而不是服务

我遇到的唯一问题是,在一些特定的华为设备上,必须在5分钟前执行的警报在创建它们的时间后刚刚触发,而不是在您设置的时间。因此,我最终提出了一个涉及服务和警报的解决方案。这样,如果服务正在运行,则当警报到达时,服务将停止并重新启动,并检索位置。在特定的华为设备中,服务总是执行发送位置,但如果由于某种原因,应用程序被关闭,警报将在不到5分钟内恢复所有内容

在那一刻,我没有使用Rx,那是很久以前的事了,使用警报是不丢失任何路线轨迹的解决方案。我们的应用被广泛使用,我不说这个名字只是因为我不想在这里发垃圾邮件


我希望我能很好地解释这个警报问题。如果您需要更多信息,请询问。

您所说的“关闭应用程序”是什么意思?你们会扼杀这个过程吗?强制关闭或从最近的视图中删除?此外,您还有更大的问题:Android 6.0+中的打盹模式、Android 8.0+中的后台位置限制,以及用户对电池电量消耗如此之快的恼怒。@elmorabea,我强制关闭该设备。在RxAndroid中,调度程序不应该是默认的守护程序线程吗?因此,即使应用程序被杀死也要继续执行?这完全取决于您对“应用程序被杀死”的定义。如果你的意思是“进程终止”,那么当进程终止时线程就会消失。好主意。在接受答案之前,我要试一试。谢谢如果您强制关闭应用程序,并且服务在同一进程中运行,则服务将被终止well@elmorabea是的,这就是我最后使用闹钟的原因。实际上,由于华为对警报的一些限制,我使用了一个涉及服务和警报的解决方案。我会马上更新答案,更新所有相关信息。添加一个链接以进一步阅读Android中的警报可能是5分钟问题的发生,因为我使用了不精确的重复警报,与我当时总结的供应商问题无关。我找到了这个