在 Android M 中确定应用何时退出空闲模式
Posted
技术标签:
【中文标题】在 Android M 中确定应用何时退出空闲模式【英文标题】:Determine when app comes out of idle mode in Android M 【发布时间】:2015-11-07 00:15:30 【问题描述】:android M 有一个名为 App Standby 的新功能,当应用程序未被使用时,它会进入空闲状态(请参阅docs),除此之外,它的网络访问被禁用。
我似乎无法找到一种方法来确定应用程序何时进入和退出此状态(通过广播意图或类似的东西),我真的需要这样做,因为我的应用程序依赖于定期使用网络检查服务器的状态。
谁能帮我弄清楚如何确定我的应用何时进入和退出空闲状态?
我一直在挖掘 M preview 2 源代码,并通过 $ adb shell am set-inactive 的调用向下挖掘,似乎有一个 AppIdleStateChangeListener
,但它似乎只在 Android 内部使用并且没有公开对于我们这些想知道我们的应用何时可以使用互联网的低级开发人员:-(
【问题讨论】:
“不会向我们这些想知道我们的应用程序何时可以使用互联网的低级开发人员公开”——如果您的代码正在运行,那么您就没有处于应用程序待机或打盹模式。 IOW,我不认为大多数应用程序必须在这里做任何特别的事情,除了建立AlarmManager
或 JobScheduler
工作,或者为您通常收听的其他广播设置。我错过了什么吗?
@CommonsWare “如果您的代码正在运行,则说明您未处于应用待机或打盹模式”——错误。自己测试一下:让应用设置警报以发送网络请求,设置警报,然后将应用置于空闲模式。当它关闭时,网络请求将失败,表明应用程序仍处于待机状态。文档指出,应用程序不会进入/退出此模式的唯一时间是基于以下列出的 4 个标准:developer.android.com/preview/…
“网络请求将失败,表明应用程序仍处于待机状态”——或者由于其他原因没有网络连接。你的应用仍然需要处理这个问题。
检查这个:[***.com/questions/31337904/… [1]:***.com/questions/31337904/…
@CommonsWare,你提出了一个很好的观点......我真的应该处理这个案例,而不管 App Standby 是什么。谢谢+1
【参考方案1】:
到目前为止,似乎当 ACTION_POWER_CONNECTED 被广播时,所有应用程序都会退出待机状态...如果 Google 在发布前没有向我们公开某些内容,这是一个潜在的解决方法。
【讨论】:
收听这个动作广播 android.os.action.DEVICE_IDLE_MODE_CHANGED 一旦你得到这个动作改变事件,使用下面的 API 检查设备空闲状态。 PowerManager pm = (PowerManager)context.getSystemService(Context.POWER_SERVICE); boolean isDeviceIdle = pm.isDeviceIdleMode(); 这是设备范围的空闲,而不是应用特定的空闲。应用程序可以在设备不空闲的情况下进入和退出空闲状态。 code.google.com/p/android-developer-preview/issues/…以上是关于在 Android M 中确定应用何时退出空闲模式的主要内容,如果未能解决你的问题,请参考以下文章