迁移到FCM和Android O-启动IntentService是否仍然有效?
我目前正在将我的项目更新为targetSdkVersion 26(Android O),并从GCM迁移到FCM 目前我有:迁移到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 这是基
- 获取GCM令牌并将该令牌发布到服务器的
RegistrationEntertService
检查main活动
,然后启动GooglePlayServices
RegistrationEventService
- 一种
,它具有MyInstanceIDListenerService
方法,该方法仅启动onTokenRefresh
RegistrationEntertService
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”
。