Jul*_*iki 5 android timer handler alarmmanager android-doze
我正在开发适用于 Android 的屏幕过滤器应用程序(如 f.lux)。我目前正在使用该功能在太阳落山时逐渐淡入过滤器。屏幕关闭时状态无关紧要,但是当屏幕打开时,淡入淡出进度正确(或立即更新)很重要。
AlarmManager.setInexactRepeating,这被认为是最节能的警报,除了:您的警报的第一次触发不会在请求的时间之前,但在该时间之后几乎整个间隔内都不会发生。
我认为这意味着第一触发器将必然在第一时间间隔内发生,这意味着该装置将被唤醒,造成不必要的电池消耗。
AlarmManager.set用来安排第一个闹钟。当它熄灭时,我可以更新屏幕,然后安排下一个闹钟。这会起作用,但会在每次闹钟时唤醒旧设备(没有打瞌睡),而不是等到屏幕打开。它还使用 AlarmManger 作为计时器,文档明确建议反对:对于计时操作(滴答、超时等),使用 Handler 更容易也更高效。
可以,然后呢,
Handler,它会定期更新 UI。但是等等:这依赖于postDelayed,它说(强调我的):在深度睡眠中花费的时间会增加执行的额外延迟。
我认为这意味着,当设备从睡眠中唤醒时,下一次更新可能不会在整个间隔内发生。我读对了吗?强迫用户在下一次更新之前等待一两分钟是一个交易破坏者。
CountDownTimer和ValueAnimator在他们的实现中都使用了这个方法,所以如果我对 Handler 的解释是正确的,那么他们都出局了。
我可以使用基于处理程序的方法,并在屏幕关闭时接收事件,此时我会取消现有动画,然后开始一个新动画。这看起来是最好的解决方案,但似乎应该有一种更简单的方法来做到这一点。
关于这个主题还有很多其他的 SO 问题。每个人和他们的母亲都建议使用 Handler,但是除了上面的引用之外,绝对没有关于设备进入睡眠状态时它的行为方式的信息。(显然)没有其他人遇到过这个问题真的很奇怪——我是在做一些非常不寻常的事情,还是遗漏了一些基本的东西?
任何人都可以提供有关Handler.postDelayed设备进入睡眠状态时的真实行为的见解,并建议我在这种特定情况下应该做什么吗?