迁移到 FCM 和 Android O - 启动 IntentService 是否仍然有效?

Migrating to FCM and Android O - Is launching an IntentService still valid?

我目前正在将我的项目更新到 targetSdkVersion 26 (Android O) 并从 GCM 迁移到 FCM。

目前我有:

这是基于 Google sample

要迁移到 FCM,我只需更改 MyInstanceIDListenerService 以继承 FirebaseInstanceIdService 并且 RegistrationIntentService 现在使用 FirebaseInstanceId 获取令牌。

一切似乎都正常,我在 Android O 模拟器中测试了它。

不过,我知道 Android O 正在限制后台服务。所以,我想知道在以 Android O 为目标的应用程序中是否仍然可以从 MainActivityMyInstanceIDListenerService.

启动 RegistrationIntentService

或者我应该将 RegistrationIntentService 代码移动到 WorkManager 执行的任务吗?

谢谢。

您的问题没有直接的答案,因为这取决于您的用例,尤其是调用 RegistrationIntentService 时需要完成多少处理。 当您的应用程序处于前台或收到某些事件(如数据推送)时,您仍然可以在 Oreo 上使用 IntentService

但是,您可以直接从 onHandleIntent() 方法使用 JobIntentService.enqueueWork() 在后台简单地启动 IntentService,这意味着它将在 OS 被执行时执行愿意为你牺牲资源。 根据工作量,您可能仍需要创建前台服务,因为您的应用会被列入白名单一段时间,但不会持续很长时间。

不过,我仍在努力寻找任何关于任何后台任务可能花费多少时间的参考资料。到目前为止,我一直依赖于实验,但这显然不是实现任何关键服务的可靠方法。