ReactiveX and Android Background Services



这更像是一个概念问题,而不是编程问题。

我目前正在使用ReactiveX(RxJava + RxAndroid(来运行间隔计时器,因为其他计时器方法在精确到毫秒时太不准确了。据我了解,ReactiveX 需要多个线程才能正常运行。

当用户不在应用程序本身上时,我需要计时器也在后台运行。但是从阅读服务文档来看,后台服务似乎只能在主线程上运行。我想知道尽管有此限制,是否仍然可以在后台运行 ReactiveX 计时器。实现服务需要对我的项目进行一些重大更改,因此我想在这样做之前我会尝试询问。

该项目是用 Kotlin 编写的,但我怀疑这很重要。但是,任何关于此代码在 Kotlin 中的外观的见解将不胜感激!

即使实际工作是在后台完成的,使用前台服务而不是后台服务似乎也很合适。 后台服务可以很容易地被系统停止,甚至可以推迟到维护(时间(窗口。 为了获取服务的"前台",通常使用通知并绑定到它: https://developer.android.com/guide/components/services#Foreground

至于另一个问题:像onStartCommand()这样的服务的生命周期函数可能会在主线程上调用,但您将使用 RxJava 立即切换到另一个线程并从这些函数返回。 即使在生命周期返回后,服务也被视为"正在运行"到系统。他们只是存在,所以让事情继续下去,应该及时返回。

Workmanager在这里不一定是一个好的选择,因为它是为可推迟的任务而设计的。因此,您无法确定何时启动。前台服务似乎是这里的方式。

最新更新