当显示关闭时,ScheduledExecutorService没有执行的原因是什么?

时间:2014-02-20 18:14:01

标签: java android

我对Android很新,遇到了一个问题,我想了解。问题是,当我的智能手机显示屏关闭时,java.util.concurrent.ScheduledExecutorService似乎没有发出任务。我之前使用的java.util.Timer没有此问题,但由于需要在停止ScheduledExecutorService后等待任务执行结束,因此正在转换到Timer。计时器用于后台运行的Service

注意:使用AlarmManager不是一个选项,因为我想了解ScheduleExecutorService的问题,否则将再次使用Timer(同步关机)。

以下是如何安排任务:

mScheduler = Executors.newSingleThreadScheduledExecutor();
mScheduler.scheduleAtFixedRate(mTask, 1, 1, TimeUnit.SECONDS);

更清楚地说明目的:我试图定期更新通知以及部分用户界面,如果设备想要进入“睡眠”模式,则不需要这样做,但我需要处理这种情况。我认为理解为什么ScheduledExecutorServiceTimer相比的行为方式将帮助我处理它。

更新

根据Chris Stratton的建议,我使用BroadcastReceiver来接收Intent.ACTION_SCREEN_ONIntent.ACTION_SCREEN_OFF意图来暂停/恢复ScheduledExecutorService,这就像一个魅力。然而,在拨打电话时,ScheduledExecutorService似乎存在另一个问题,执行不会停止,但似乎会以某种方式受到限制。仅当由于接近传感器而关闭屏幕时才会出现这种情况(在这种情况下也没有接收到意图)......

1 个答案:

答案 0 :(得分:1)

当屏幕关闭时,如果没有其他应用程序持有WakeLock,则CPU暂停。

在屏幕关闭时,只要您需要完成任务,就应该使用PARTIAL WakeLock。

并确保在完成所有的ackground工作后立即释放它。