最新实现了一个需求:来电时,弹出来电界面,但是不亮屏,延迟5s后亮屏,播放来电铃声。但是遇到一个问题: 当来电时超过5s后,也不亮屏和播放铃声,只要再点击屏幕亮屏,就会马上出现来电界面。通过log查看,handler的延迟任务根本没执行,由此想到是系统休眠导致的问题。
为了节省电量,系统在空闲时会进入休眠状态,这时thread、handler什么的都会停止。解决方法有两个:1)用AlarmManager唤醒系统 2)获取cpu weaklock,让cpu一直运行。 对于延迟时间不长的任务,可以采用方法2,这样简单一些。 如果需要在很长时间后执行延迟任务,则需要采用方法1。