The*_*org 9 android geolocation push-notification firebase-cloud-messaging
上下文
我们正在开发一个应用程序,应该执行以下操作:
我根据此处的Firebase推送示例开发了应用程序
问题
该应用程序在我的旧手机上工作正常,但在我的新测试手机(Android 8.1.0,LineageOS 15.1)上,当手机处于睡眠模式时,我们遇到了问题.在这种情况下,FCM消息立即到达,但是一旦电话解锁,服务就会首先启动.所以消息卡在2.和3之间.
我们需要应用程序立即响应 - 而不是在用户决定在2小时后使用他的手机时.
我认为问题是由于Android 6引入的打盹模式.我试图通过在设置 - >电池 - >电池优化中将应用程序添加到白名单来解决它,但这并没有解决问题.
问题
是的!你是对的,这可能是由于API 23 Marshmallow 中引入的Doze 和应用程序待机功能所致。
正如文档中提到的,系统确实会忽略唤醒锁并且系统不允许 JobScheduler
运行,这有效地阻止了您的应用程序运行作业。
一个简单有效的解决方法是在正常 后台服务startService()
中运行位置检测例程,并在收到 FCM 推送时启动它。
请注意,您可能仍然需要将您的应用程序列入白名单,因为正如另一篇文章中提到的,只有列入白名单的应用程序才能使用网络并持有部分唤醒锁。