我的应用程序使用HurmManager,它从4年前开始工作。但我注意到它在某些设备中开始出现故障。
我很确定代码是正确的(我正在使用WakefulBroadcastReccher,并为带有Doze的设备使用setExactAndAllowWhileIdle),因为它在Nexus设备上运行良好,但在一些制造商的设备(华为,小米…)中失败。
例如,华为设备有一种可以杀死应用程序的电池管理器,当应用程序被杀死时,预定的警报会被取消。因此,在华为电池管理器中将应用程序设置为“受保护”可以解决问题。
但最近我注意到它不适用于更多设备:小米、三星(也许它与新的“智能管理器”有关?)…似乎这种行为正在成为一种标准:杀死后台应用程序。
有人知道这件事吗?有办法确保警报响起吗?
编辑:此问题是由不同制造商添加的“电池保护程序”引起的。更多信息在这里:https://dontkillmyapp.com/
我已经试着解决了几个星期了。我什么也没找到。华为只是在一段时间后杀死了所有的警报。如果我把应用程序放在他们的电池保护程序中,它没有帮助。但是如果我改变我的应用程序的包名,包含像闹钟、时钟或日历这样的词,它就像在任何其他设备上一样完全正常。我不明白谷歌怎么能为这种垃圾提供认证。我认为OEM不应该以这种方式修改核心平台。我知道他们有自己的电池保护程序,当用户不使用它时,它会在一段时间后杀死应用程序。但是这种杀死警报也是受保护的应用程序。
对于精确的定时警报也有帮助。但是不可能将其用于像小部件更新这样的想法。
更新:通过包名关键字进行保护已经无法在当前的华为设备上运行,2017年确实如此。
问题是智能管理器。三星有一个电池管理器,有时会禁用某些应用程序在后台运行。它试图在返回应用程序时“恢复”,但完全禁用应用程序,或者可能每5分钟左右恢复一次(取决于三星的操作方式)。
这适用于android的库存版本,因为没有Samsung Manager。您还可以安装自定义版本的android,它具有一些启用SM的功能(取决于rom)。
大多数现代Android设备都带有一个应用程序或机制,它会自动尝试找出如何节省电池,因此可能会杀死某些第三方应用程序。这可能会导致删除计划任务和作业,(例如警报不响,消息推送不起作用等)。在许多情况下,这完全独立于Android的电池节省机制,在我的情况下,当我检测到某些设备型号时,我无法进行更多的电池优化,我将用户重定向到启动管理器以将我的应用程序列入白名单
您在这个链接中发现了每个模型都应该调用的意图https://android-arsenal.com/details/1/6771