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

时间:2018-06-01 21:36:44

标签: android firebase-cloud-messaging intentservice android-workmanager

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

目前我有:

  • 获取GCM令牌并将此令牌发布到服务器的RegistrationIntentService

  • MainActivity检查GooglePlayServices,然后启动RegistrationIntentService

  • MyInstanceIDListenerService,其onTokenRefresh方法只能启动RegistrationIntentService

这是基于Google sample

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

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

但是,我知道Android O限制后台服务。所以,我想知道在针对Android O的应用中,从RegistrationIntentServiceMainActivity启动MyInstanceIDListenerService是否仍然可以。

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

感谢。

1 个答案:

答案 0 :(得分:1)

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

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

我仍然试图找到任何有关任何后台任务可能花费多少时间的参考。到目前为止,我依靠实验,但这显然不是实施任何关键服务的可靠方式。