我目前正在将我的项目更新为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的应用中,从RegistrationIntentService
和MainActivity
启动MyInstanceIDListenerService
是否仍然可以。
或者我应该将RegistrationIntentService
代码移动到WorkManager
要执行的任务吗?
感谢。
答案 0 :(得分:1)
您的问题没有直接的答案,因为它取决于您的使用案例,尤其是在调用RegistrationIntentService
时需要完成多少处理。
当您的应用处于前台或收到某些事件(如数据推送)时,您仍然可以在Oreo上使用IntentService
。
但是,您可以直接在IntentService
方法中使用JobIntentService.enqueueWork()
在后台启动onHandleIntent()
,这意味着当操作系统愿意牺牲资源时,它会被执行您。
根据您可能仍需要创建前台服务的工作量,因为您的应用程序将暂时列入白名单,但不会延长一段时间。
我仍然试图找到任何有关任何后台任务可能花费多少时间的参考。到目前为止,我依靠实验,但这显然不是实施任何关键服务的可靠方式。