Oreo中的SMS_RECEIVED广播接收器和JobIntentService

时间:2018-07-21 21:07:32

标签: android broadcastreceiver android-8.0-oreo background-service jobintentservice

我已经阅读了有关Android API Level 26中新背景限制的Android文档,并牢记这些,我对应用的设计如下:

  • 该应用有一个BroadcastReceiver收听"SMS_RECEIVED"广播。这是一个隐式广播,目前在奥利奥(Oreo)中受到限制,但这是其exceptions list中的广播之一。
  • BroadcastReceiver运行时,它排队一个由JobIntentService执行的新任务。收到广播后,应用should be temporarily whitelistedJobIntentService就会有机会做自己的事情。

即使我从“最近使用的应用程序”列表中关闭了该应用程序,所有这些似乎都可以正常工作。但是,我从一些用户那里收到报告,显然每隔几天,他们不得不再次打开该应用程序,因为该应用程序突然在后台停止运行。

为什么操作系统突然停止将广播"SMS_RECEIVED"发送到我的应用程序?如果不是这样,则必须是不允许JobIntentService运行。为什么不?收到短信后,应立即将该应用列入白名单。我有什么误会?

1 个答案:

答案 0 :(得分:2)

除了打ze睡外,Android还包含名为App Standby的功能。根据文档:

  

App Standby推迟了用户最近未与之交互的应用程序的后台网络活动。

默认的“最近互动”时间范围是3天,这与您的报告“显然每隔几天”停止相关。

因此,似乎发生了您的JobIntentService被解雇(您的应用确实在收到广播后仍被列入白名单的情况),但是App Standby阻止了您的JobIntentService连接到网络。

您可以通过遵循Testing your app with App Standby instructions来确认是否是这种情况:

adb shell dumpsys battery unplug
adb shell am set-inactive <packageName> true

您可以考虑浏览Acceptable use cases for whitelisting,以查看asking to ignore battery optimizations是否适合您的用例。