将Android应用排除在备用存储桶之外

问题描述 投票:1回答:1

随着Android 9电池优化进一步推进,应用程序被分类为备用存储桶,具体取决于用户最近与应用程序进行了多少交互(请参阅Android documentation)。系统会根据应用所在的存储区限制每个应用可用的设备资源。

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

更具体地说,我有一个PeriodicWorkRequest必须每30分钟运行一次,灵活性为10分钟。但是,如果我理解table of imposed power restrictions这样的工作请求可以推迟到24小时,如果我的应用程序被放入“罕见”桶。 (在引擎盖下,工作库使用作业调度程序。)

有关场景的更多详细信息

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

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

由于应用程序是安全关键的,因此必须检测应用程序失去与服务器的连接的故障情况。为此,服务器实际上定期在后台发送消息,即序列idleidleidleidlealarmalarmalarmalarmidleidleidle,...通常,消息以低FCM广播 - 每5分钟一次。如果状态发生变化,则会立即以高FCM优先级(cp。粗体字母)发送附加消息。

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

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

我可以重新说出上面的问题:我完全理解为什么Android将电池优化推向了优势。有许多(疯狂的)应用程序滥用周期性任务的目的应该以不同的方式解决。网络仍然充满了“愚蠢”的编程建议,比如每5秒检查一个特定的网页进行修改。但是,如果电池优化变得越来越成为障碍,我如何期望编写需要看门狗用于合法目的的安全关键应用程序。谷歌的规则大拇指“如果用户不使用你的应用程序,对他/她来说显然不重要”在这里不适用。

android background-process power-management android-powermanager
1个回答
0
投票

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

你不能,也不应该。同样的documentation说:

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

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

白名单应用的作业和同步被推迟

这也是这样的:

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

© www.soinside.com 2019 - 2024. All rights reserved.