ReactiveX 和 Android 后台服务

ReactiveX and Android Background Services

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

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

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

该项目是用 Kotlin 编写的,但我怀疑这是否重要。但是,如果您对这段代码在 Kotlin 中的样子有任何见解,我们将不胜感激!

尽管实际工作是在后台完成的,但使用 前台 服务似乎更合适,而不是 后台 服务。 后台服务很容易被系统停止,甚至被推迟到维护(时间)windows。 为了获得服务的“前景”,通常使用通知并绑定到它: https://developer.android.com/guide/components/services#Foreground

至于另一个问题:像 onStartCommand() 这样的服务的生命周期函数可能会在主线程上被调用,但你会使用 RxJava 立即切换到另一个线程 return从那些功能。 即使在生命周期 return 之后,系统仍将服务视为“运行”。它们只是存在,所以让事情继续下去,应该 return 迅速。

Workmanager 在这里不一定是一个好的选择,因为它是为 可延迟 任务设计的。所以你不能确定它什么时候开始。前台服务似乎是去这里的方式。