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

迁移到FCM和Android O-启动IntentService是否仍然有效?,android,firebase-cloud-messaging,intentservice,android-workmanager,Android,Firebase Cloud Messaging,Intentservice,Android Workmanager,我目前正在将我的项目更新为targetSdkVersion 26(Android O),并从GCM迁移到FCM 目前我有: 获取GCM令牌并将该令牌发布到服务器的RegistrationEntertService main活动检查GooglePlayServices,然后启动RegistrationEventService 一种MyInstanceIDListenerService,它具有onTokenRefresh方法,该方法仅启动RegistrationEntertService 这是基

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

目前我有:

  • 获取GCM令牌并将该令牌发布到服务器的
    RegistrationEntertService

  • main活动
    检查
    GooglePlayServices
    ,然后启动
    RegistrationEventService

  • 一种
    MyInstanceIDListenerService
    ,它具有
    onTokenRefresh
    方法,该方法仅启动
    RegistrationEntertService

这是基于谷歌的

要迁移到FCM,我只需将
MyInstanceIDListenerService
更改为从
FirebaseInstanceIdService
继承,而
RegistrationIntentService
现在使用
FirebaseInstanceId
获取令牌

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

然而,我知道安卓O限制了后台服务。因此,我想知道在一个针对Android O的应用程序中,从
main活动和
MyInstanceIDListenerService启动
RegistrationEntertService
是否仍然可以

或者我应该将
RegistrationEntertService
代码移动到由
WorkManager
执行的任务中吗


谢谢。

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

但是,您可以直接从
onHandleIntent()
方法在后台启动
IntentService
,这意味着当操作系统愿意为您牺牲资源时,它将被执行。 根据工作量的不同,您可能仍然需要创建前台服务,因为您的应用程序将在一段时间内被列入白名单,但不会延长


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

谢谢。后台工作是使用FirebaseInstanceId获取FCM令牌,然后调用我自己的API服务来注册FCM设备令牌。所以它通常应该在几秒钟或更短的时间内完成。我不相信这几秒钟,它可能需要更多的时间,例如当它超时时。我建议您使用
JobIntentService.enqueueWork()
启动自己的
IntentService
。谢谢,我最终扩展了
JobIntentService
并使用
JobIntentService.enqueueWork(上下文、RegistrationIntentService.class、作业ID、意图)
启动了它。在清单中还添加了
android:permission=“android.permission.BIND\u JOB\u SERVICE”