android - 当手机处于睡眠/待机模式时,Android App 失去声音/计时
问题描述
几年前我写了一个安卓应用程序,它的过程相当简单。我设置了一个由不同步速(步行、慢跑、冲刺)组成的条件系列,以及与每个部分相关的时间:步行 1 分钟,工作 2 分钟,冲刺 3 分钟。当我按下开始按钮时,该应用程序将显示每个段的倒数计时器、完整的时间计时器和步速(使用 GPS)。有一个显示,但主要特点是该应用程序使用声音告诉我很长时间,直到下一次转换以及接下来会发生什么。
例如,当它启动时,它每秒发出一个声音,持续 5 秒,然后说“2 分钟”。在 30 秒标记处会发出声音。在 1 分钟时它会说“1 分钟”,在 30 秒时会发出另一个声音,然后在改变速度前 10 秒它会说“下一条腿(慢跑)(或步行或冲刺)”并在最后 5 秒播放声音。这样我就不需要看显示器来知道我在我创建的条件程序中的位置。
问题:当我创建并运行它时,我正在运行我现在拥有的当前版本(8.1.0)之后的两个 Android 版本,现在我在 LG Stylo 4 上运行它。那时设备将进入睡眠/待机状态模式,屏幕自动变暗或我按下电源按钮,应用程序将继续正常运行。时间会流逝,声音会准时发出。
这是我第一次在新手机/操作系统上安装和运行我的应用程序,假设它运行不顺利。有一次,我觉得我还剩 30 秒,但一分钟内我什么也没听到。看起来应用程序现在暂停了一半,就像 30 秒变成了超过 1 分钟,并且在过渡时没有声音。
Android 发生了一些变化,在过去的版本中似乎没有发生这种情况。我想要的是让程序在设备切换到睡眠模式时保持实时运行,而当我读到将应用程序从省电模式中排除时,那是行不通的。
即使手机处于睡眠模式,我也可以通过什么方式让这个应用程序在后台运行、倒计时和发出声音。
- 操作系统版本为 8.1.0
- 内核 3.18.71
- 构建 OPM1.171019.019
- 设备:LM-Q710TS(LG Stylo 4)
有问题的具体代码是这样的:
//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){
}
}
};
我看到帖子提到使用部分唤醒锁或其他版本的计时器,但现在找不到。希望有一个直截了当的答案来解决这个难题。
解决方案
推荐阅读
- javascript - Javascript - 在标题中使用连字符转换字符串标题大小写
- android - 如何让编译器等待 OnCompleteListener Kotlin
- r - 如何在R中的字符串之前和之后删除引号字符串
- python - 将异步函数作为参数传递
- java - 打包到 jar 时的问题(postgresql)
- javascript - 在初始渲染时调用 useEffect 钩子而不改变依赖关系
- c# - 创建一个通用的 for 循环,将用户输入打印到类似网格的对象中
- python - 在 pandas groupby 输出中包含特定列
- php - 如何从 WooCommerce 客户感谢电子邮件中删除字段(客户处理订单)
- delphi - 如何使用 DBLookupComboBox 在 Delphi 中的表单页面之间移动