当屏幕变为非活动状态时,计时器似乎暂停

时间:2010-03-20 14:29:13

标签: android

所以我有一个非常简单的android活动,当你按下按钮时会启动一个计时器。

Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
doStuff();
}
}, 15 * 60 * 1000);

因此,当我进行测试时,这对我来说相当不错,但是当屏幕变为非活动状态时,计时器就会变得非常活跃。我对此感到有些惊讶。我知道你需要创建一个服务,让任何东西在后台运行,但我没有意识到,当手机由于缺乏活动而使屏幕失活时,这是前台活动所必需的。令我感到困惑的是,我认为这个工作正如我原先预期的那样,只是在过去几周左右,计时器受到手机省电的影响。我可能错了..

基本上我的问题是:我看到了预期的行为吗?我是否需要将所有计时器创建为服务或以某种方式禁止节省电源?

感谢任何建议, 帕特里克

1 个答案:

答案 0 :(得分:3)

  

我对此感到有些惊讶。

当屏幕熄灭时,CPU很快就会关闭。您的Timer用户与此无关,因为这是Java事物,而不是Android事物。

  

令我困惑的是我想这个   像我原先预期的那样工作   就在最近几周左右了   计时器受到手机的影响   节电。

我非常怀疑。

  我看到了预期的行为吗?

  

我是否需要创建所有计时器   服务或以某种方式不允许   省电?

如果您的活动必须保持屏幕和设备开启,请使用:

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

然而,这应该是像视频播放器那样。

如果您尝试执行更类似Windows计划任务或Linux cron作业的操作,则需要使用AlarmManagerIntentService,可能是WakefulIntentService

还有其他可能性,但我不知道你想要建立什么。