我正在开发一个需要经常运行一小段代码(例如,每两秒钟一次)的应用程序.我尝试使用简单的Thread.sleep()(或android.os.SystemClock.sleep())来使其工作,以避免中断,最后我尝试使用Timer和Handler),但是结果是时间程序进入睡眠状态是随机的(或者如果我使用Timer或Handler,则程序根本不会运行,因为当屏幕关闭时系统会丢弃它们的消息),因为系统会在屏幕关闭时进入深度睡眠模式.

例如,如果我将手机插入充电器或正在播放音乐(避免进入深度睡眠模式),则该代码正确运行,但是当手机不执行任何操作时,时间可能会从两秒钟增加到几分钟睡觉.

有没有其他选择?

如果不是,是否有任何方法可以检测到系统何时进入深度睡眠模式?

解决方法:

为时已晚,但对其他人可能有用.

是的,Timers在深度睡眠模式下不起作用.我认为没有比AlarmManager更好的方法来在深度睡眠模式下定期运行某些东西了.

另外,由于您的频率仅为2秒,我认为您可能必须进行精确的警报(setExact()),因为如果您的要求在紧急情况下,常规警报可能无法更好地为您提供服务.有时甚至setExact可能也无法捕获我观察到的唤醒锁.因此,您必须获取自己的(PARTIAL_ ..)唤醒锁,然后执行操作并释放该锁.

但是是否必须每次必须运行2秒?

如果没有继续使用定时器,则在设备唤醒后,定时器将自动继续工作.

看一下Should I use AlarmManager or Handler?

标签:handler,timer,screen,sleep,android

来源: https://codeday.me/bug/20191123/2065163.html

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐