SMS_RECEIVED Oreo 中的广播接收器和 JobIntentService
SMS_RECEIVED Broadcast Receiver and JobIntentService in Oreo
我已经阅读了 Android 关于 Android API 级别 26 中新背景限制的文档,考虑到这些,我设计了我的应用程序如下:
- 该应用有一个
BroadcastReceiver
侦听 "SMS_RECEIVED"
广播。这是一个隐式广播,现在在 Oreo 中受到限制,但它是他们 exceptions list. 中的一种。
- 当这个
BroadcastReceiver
运行 时,它会将一个新任务排入队列,由 JobIntentService
执行。当收到广播时,应用程序 should be temporarily whitelisted,因此 JobIntentService
有 window 的机会去做它的事情。
所有这些似乎都运行良好,即使我从 "recent apps" 列表中关闭应用程序也是如此。但是,我收到一些用户的报告,显然每隔几天,他们必须再次打开该应用程序,因为它突然在后台停止工作。
为什么 OS 突然停止向我的应用程序发送 "SMS_RECEIVED"
广播?如果不是那个,那一定是JobIntentService
不被允许运行。为什么不?该应用程序应在收到短信后立即列入白名单。我误会了什么?
除了 Doze,Android 还包含称为 App Standby 的功能。根据文档:
App Standby defers background network activity for apps with which the user has not recently interacted.
默认 'recently interacted' 时间范围是 3 天,这与您报告的事情停止 'apparently every few days'。
因此,您的 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 to see if asking to ignore battery optimizations 是您的用例的一个选项。
我已经阅读了 Android 关于 Android API 级别 26 中新背景限制的文档,考虑到这些,我设计了我的应用程序如下:
- 该应用有一个
BroadcastReceiver
侦听"SMS_RECEIVED"
广播。这是一个隐式广播,现在在 Oreo 中受到限制,但它是他们 exceptions list. 中的一种。
- 当这个
BroadcastReceiver
运行 时,它会将一个新任务排入队列,由JobIntentService
执行。当收到广播时,应用程序 should be temporarily whitelisted,因此JobIntentService
有 window 的机会去做它的事情。
所有这些似乎都运行良好,即使我从 "recent apps" 列表中关闭应用程序也是如此。但是,我收到一些用户的报告,显然每隔几天,他们必须再次打开该应用程序,因为它突然在后台停止工作。
为什么 OS 突然停止向我的应用程序发送 "SMS_RECEIVED"
广播?如果不是那个,那一定是JobIntentService
不被允许运行。为什么不?该应用程序应在收到短信后立即列入白名单。我误会了什么?
除了 Doze,Android 还包含称为 App Standby 的功能。根据文档:
App Standby defers background network activity for apps with which the user has not recently interacted.
默认 'recently interacted' 时间范围是 3 天,这与您报告的事情停止 'apparently every few days'。
因此,您的 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 to see if asking to ignore battery optimizations 是您的用例的一个选项。