排除安卓应用被放入备用桶

use*_*527 5 android background-process power-management android-powermanager

随着 Android 9 电池优化得到进一步推进,应用程序根据用户最近与应用程序交互的程度将应用程序分类为待机存储区(请参阅Android 文档)。系统会根据应用所在的存储桶限制每个应用可用的设备资源。

即使用户不与之交互,我如何将我的应用程序保留在“工作集”存储桶中?(我没有找到任何允许覆盖此电源管理功能的权限或类似权限。)

更具体地说,我有一个PeriodicWorkRequest必须每 30 分钟运行一次,灵活性为 10 分钟。但是,如果我了解强加的电源限制表,如果我的应用程序被放入“稀有”存储桶,则此类工作请求最多可以推迟 24 小时。(在幕后,Work 库使用作业调度程序。)

情景的更多细节

该应用程序对安全至关重要,不适合公共使用,但仅对有限的用户有意义。但是,如果其他人使用此应用程序,不会发生任何不好的事情,但该应用程序对他/她没有任何作用。

更准确地说,该应用程序连接到特定建筑物的中央火警站。所有员工都被要求在他们的智能手机上安装该应用程序。如果该建筑物的中央火灾报警站检测到事件,它会向所有注册的智能手机发送推送通知(通过 FCM),并且该应用程序会播放警报声。这意味着(希望)很长一段时间内没有任何事情发生,并且用户无意以任何方式与应用程序进行交互。该应用程序本身不提供任何交互,它仅说明当前状态(即绿色“OK”标志或红色“ALERT”标志)并在其余时间在后台等待。

由于应用程序对安全至关重要,因此必须检测应用程序与服务器断开连接的故障情况。为此,服务器实际上在后台发送消息周期性,即序列idleidleidleidlealarmalarmalarmalarmidleidleidle,...通常情况下,消息被广播低FCM优先级,每5分钟。如果状态发生变化,则会立即发送具有高 FCM 优先级(cp. 粗体字母)的附加消息。

该应用程序使用PeriodicWorkRequest上述问题中提到的方法实现了一个看门狗。这个看门狗有双重作用:唤醒设备并使设备接收所有(低优先级)已被推迟的 FCM 消息,然后检查最近的消息是否不超过 1.5*5 分钟。如果失败,应用程序会尝试向服务器重新注册自己,并等待状态消息开始再次传入。如果这也失败了,应用程序会向用户发出警告。

到目前为止一切正常。唯一的问题是新的电池优化,它会在某个时间点减慢看门狗的速度。当然,我可以制定一个常设规定,强制所有员工不时打开应用程序并简单地查看它,但这有点愚蠢。

我可以重新表述上面的问题:我完全理解为什么 Android 将电池优化推向了边缘。有很多(疯狂的)应用程序误用了周期性任务,目的是本应以不同的方式解决。并且网络上仍然充斥着“愚蠢”的编程建议,例如每 5 秒检查一次特定网页的修改情况。但是,如果电池优化越来越成为一个障碍,我如何期望编写需要看门狗用于合法目的的安全关键应用程序。谷歌的规则“如果用户不使用你的应用程序,这对他/她来说显然不重要”在这里并不适用。

Mel*_*des 1

\n

即使用户不与其交互,如何将我的应用程序保留在“工作集”存储桶中?

\n
\n\n

不能也不应该。同一份文件说:

\n\n
\n

不要试图操纵系统将您的应用程序放入一个或另一个存储桶中。系统的分桶方法可以改变,每个设备制造商都可以选择使用自己的算法编写自己的分桶应用程序。相反,请确保您的应用无论位于哪个存储桶中都能正常运行。

\n
\n\n

即使白名单也不适用于您的情况,因为:

\n\n
\n

白名单中的应用程序\xe2\x80\x99s 作业和同步被推迟

\n
\n\n

还有这个:

\n\n
\n

注意:Google Play 政策禁止应用程序请求直接免除 Android 6.0+ 中的电源管理功能(Doze 和应用程序待机),除非应用程序的核心功能受到不利影响。

\n
\n