所以我有一个非常简单的android活动,当你按下按钮时会启动一个计时器。
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
doStuff();
}
}, 15 * 60 * 1000);
因此,当我进行测试时,这对我来说相当不错,但是当屏幕变为非活动状态时,计时器就会变得非常活跃。我对此感到有些惊讶。我知道你需要创建一个服务,让任何东西在后台运行,但我没有意识到,当手机由于缺乏活动而使屏幕失活时,这是前台活动所必需的。令我感到困惑的是,我认为这个工作正如我原先预期的那样,只是在过去几周左右,计时器受到手机省电的影响。我可能错了..
基本上我的问题是:我看到了预期的行为吗?我是否需要将所有计时器创建为服务或以某种方式禁止节省电源?
感谢任何建议, 帕特里克
答案 0 :(得分:3)
我对此感到有些惊讶。
当屏幕熄灭时,CPU很快就会关闭。您的Timer
用户与此无关,因为这是Java事物,而不是Android事物。
令我困惑的是我想这个 像我原先预期的那样工作 就在最近几周左右了 计时器受到手机的影响 节电。
我非常怀疑。
我看到了预期的行为吗?
是
我是否需要创建所有计时器 服务或以某种方式不允许 省电?
如果您的活动必须保持屏幕和设备开启,请使用:
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
然而,这应该是像视频播放器那样。
如果您尝试执行更类似Windows计划任务或Linux cron作业的操作,则需要使用AlarmManager
和IntentService
,可能是WakefulIntentService
。
还有其他可能性,但我不知道你想要建立什么。