代码之家  ›  专栏  ›  技术社区  ›  AxiomaticNexus

Oreo中的短信接收广播接收器和JobIntentService

  •  0
  • AxiomaticNexus  · 技术社区  · 7 年前

    我已经阅读了android文档中有关android api级别26中新的后台限制的内容,并且考虑到这些,我已经按照如下方式设计了我的应用程序:

    • 应用程序有一个 BroadcastReceiver 倾听 "SMS_RECEIVED" 广播这是一个隐含的广播,现在限制在奥利奥,但它是那些 exceptions list .
    • 当这个 广播接收机 运行时,它会将要由 JobIntentService . 接收广播时,应用程序 should be temporarily whitelisted 因此, JobIntentService服务 给了一个机会去做它的事情。

    所有这些似乎都工作得很好,即使我从“最近的应用”列表中关闭了该应用然而,我收到一些用户的报告,显然每隔几天,他们就必须再次打开应用程序,因为它突然在后台停止工作。

    为什么操作系统突然停止发送 “收到短信” 广播到我的应用程序?如果不是这样,那一定是 JobIntentService服务 不允许运行为什么不?应用程序应该在收到短信后立即被白名单。我误解了什么?

    1 回复  |  直到 7 年前
        1
  •  2
  •   ianhanniballake    7 年前

    除了打瞌睡,Android还包含名为 App Standby . 根据文件:

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

    默认的“最近交互”时间框架是3天,这与“显然每隔几天”停止的事件报告相对应。

    因此,似乎正在发生的是 JobIntentService 激发(你的应用在接收到广播后仍然是白名单),但是应用待机阻止你 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 是您的用例的一个选项。