【问题标题】:Will I use more battery if I set a repeating alarm for every 10 minutes from now on instead of setting a new single alarm each time?如果我从现在开始每 10 分钟设置一次重复闹钟,而不是每次都设置一个新的单一闹钟,我会使用更多电池吗?
【发布时间】:2014-12-13 03:11:08
【问题描述】:

如果我从现在开始每 10 分钟设置一次重复闹钟,而不是每次都设置一个新闹钟,是否会消耗更多电池?

案例 A: 我从现在开始通过警报管理器设置了 10 分钟后的警报,然后设置了 10 分钟的间隔,所以从现在开始应该每 10 分钟触发一次。

案例 B: 从现在开始,我通过警报管理器将单个警报设置为 10 分钟后,然后当它触发时,我调用相同的方法在 10 分钟后设置相同的警报。

案例 A 会比案例 B 浪费更多的电池。

public static void executeTaskAfterXMinutes(Context context, int minutes) {

    long now = Calendar.getInstance().getTimeInMillis();
    long certainAmountOfMinutesLater = ((long) minutes * ONE_MINUTE_IN_MILLIS) + now;

    Intent intent = new Intent(context, TaskReceiver.class);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 1300, intent, 0);
    AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
    alarmManager.setExact(...
    alarmManager.setRepeating(...
} 

【问题讨论】:

    标签: android


    【解决方案1】:

    由于您引用 setExact(),我假设您正在考虑在 API 级别 19+ 上执行此操作。

    在这种情况下,如果targetSdkVersion 为 19 或更高,setRepeating() 将比使用 setExact() 自己重复更有效,因为如果您的 targetSdkVersionsetRepeating() 在 API 级别 19+ 上不精确是 19 岁或更高。允许 Android 通过不准确的警报合并事件可以减少功耗。

    即使setRepeating() 是精确的(API 级别 18 及以下,或targetSdkVersion 18 或以下),我希望setRepeating() 至少与set()/setExact() 一样有效。它甚至可能更有效,因为 Android 会提前知道您的事件应该何时发生,并且可能会将其他应用程序的不精确事件移动到您请求的时间。使用set()/setExact(),Android 只知道一个未来事件。

    【讨论】:

    • @J.K.:好吧,我建议setInexactRepeating(),更明确地说明这是不准确的事实,因此您在旧设备上会出现不准确的行为。鉴于setExact()setRepeating() 之间的选择,我会使用setRepeating()
    • 谢谢!你一直都很乐于助人
    • 我认为允许 Android 通过不准确的警报合并事件是没有意义的。确切的闹钟可能更符合挂钟对齐,因此将所有闹钟拉向挂钟对齐似乎非常低效。
    • @JavaChipMocha:从电池的角度来看,它会更高效。谷歌已经完成了conference presentations on this point——欢迎您提供类似级别的证据来支持您的观点。此外,驱动是使所有重复出现的警报不准确(直接或通过JobScheduler 等层),这将减少您引用的“挂钟对齐”问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多