Android处理所有AlarmManager限制

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

我在Play商店有一个闹钟应用程序在大多数设备上运行良好,但不幸的是有些设备报告警报在调整时没有触发,我从研究中得出结论,有些设备限制应用程序在背景和杀死报警管理器!

我使用以下代码处理了打盹模式:

if (Build.VERSION.SDK_INT >= 23)
{
alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, timeStamp, pendingIntent);
}
else if (Build.VERSION.SDK_INT >= 19)
{
alarmManager.setExact(AlarmManager.RTC_WAKEUP, timeStamp, pendingIntent);
}
else
{
alarmManager.set(AlarmManager.RTC_WAKEUP, timeStamp, pendingIntent);
}

然而,在某些设备上这似乎还不够。

我已经读过前台服务可以阻止系统杀死应用程序,但是我无法确保这一点,因为我没有手头有问题发生的设备。

我想确保我的闹钟在所有设备上完美运行并处理所有场景,那么有什么可以做的事情来确保我的应用程序正常运行并且不被系统杀死?

android alarmmanager clock android-doze
1个回答
3
投票

您应该使用AlarmManagerCompat.setAlarmClock()设置适合闹钟应用程序的用户可见警报。此API在API 21+上使用setAlarmClock(),根据其文档:

即使系统处于低功率空闲(a.k.a. doze)模式,也允许触发这些警报。当系统看到这样的警报出现时,系统也可以做一些准备工作,以减少如果这导致设备完全唤醒可能发生的后台工作量 - 这是为了避免大量的情况在早上同一时间设置闹钟的设备,当时全部醒来并突然淹没网络,等待后台工作。因此,这些类型的警报在电池使用时可能非常昂贵,并且仅应用于其预期目的。

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