几年前,我编写了一个android应用程序,该过程相当简单。我建立了一个由不同步伐(步行,慢跑,冲刺)组成的条件系列,每个分段的时间分别为:步行1分钟,工作2分钟,冲刺3分钟。当我按下执行按钮时,该应用将为每个分段显示一个倒数计时器,一个完整的计时器和速度(使用GPS)。有一个显示屏,但是主要功能是该应用使用声音告诉我很长时间,直到下一次转换以及接下来会发生什么。
例如,启动时每秒发出一声声音,持续5秒,然后说“ 2分钟”。在30秒标记处将发出声音。在1分钟时会说“ 1分钟”,在30秒时会发出另一种声音,然后在改变速度之前的10秒时会说“下一条腿(慢跑)(或步行或冲刺)”,并在最后5秒钟播放声音。这样,我无需查看显示屏即可知道我在创建的条件程序中的位置。
问题:当我创建并运行它时,我正在运行两个版本的Android(目前拥有的版本为8.1.0),现在我在LG Stylo 4上运行它。那时该设备将进入睡眠/待机模式下,屏幕自动变黑,或者我按下电源按钮,应用程序将继续正常运行。时间会减少,声音会准时发出。
这是我第一次在新的手机/操作系统上安装并运行我的应用程序,并且说运行不顺利。在某一点上,我虽然还剩30秒钟,但一分钟没听到任何声音。看来该应用现在已经暂停了一半,例如30秒变成了1分钟以上,并且过渡时没有声音。
Android发生了一些变化,在以前的版本中似乎没有发生。我想要的是让程序在设备切换到睡眠模式时保持实时运行,同时我读到有关从节电模式中排除该应用程序的信息,但这没有用。
即使手机处于睡眠模式,我仍可以通过什么方式使该应用程序在后台运行,倒计时并发出声音。
有问题的特定代码是这样:
//runs without a timer by reposting this handler at the end of the runnable
Handler timerHandler = new Handler();
Runnable timerRunnable = new Runnable() {
@Override
public void run() {
// do something here to display
processTime(); // process what to be done on a sec by sec basis
try {
timerHandler.postDelayed(this, 1000);
} catch (Exception ex){
}
}
};
我看到了使用部分唤醒锁或其他定时器版本的帖子,但现在找不到。希望对这个难题有一个直接的答案。