应用程序关闭后执行RxAndroid Observables

问题描述 投票:1回答:1

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 rx-java background-process rx-android
1个回答
1
投票

您可以使用services继续在后台和wakelocks中执行代码,但我必须在您描述的内容中执行类似的操作,并发现如果Android系统需要空闲内存,服务可以随时被杀死。

我找到的解决方案是使用alarms,如果您安排警报,无论您的应用程序是否仍在执行,都会触发此警报。这样,即使系统由于缺乏资源而杀死了应用程序,我的应用程序也可以获得设备位置。这是我发现在这种情况下有效的唯一解决方案。

当他们说如果你真的需要你的应用程序继续,无论你应该使用什么警报而不是服务时,这个想法来到我的谷歌i / o。

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

那一刻我没有使用Rx,就在不久之前,使用闹钟是解决方案,不会失去任何路线。我们的应用程序被广泛使用,我不说这个名字只是因为我不想在这里发送垃圾邮件。

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

© www.soinside.com 2019 - 2024. All rights reserved.