android - 打瞌睡不限制服务
问题描述
我有一个Service
每 10 秒显示一次敬酒,但我希望 Doze 在后台运行时将其减慢到每 15 分钟,因为该应用程序未列入白名单。这是我的服务:
@Override
public void onCreate() {
super.onCreate();
if (mTimer != null)
mTimer = null;
// Create new Timer
mTimer = new Timer();
// Required to Schedule DisplayToastTimerTask for repeated execution with an interval of `2 min`
mTimer.scheduleAtFixedRate(new DisplayToastTimerTask(), TIMER_DELAY, TIMER_INTERVAL);
}
...
private class DisplayToastTimerTask extends TimerTask {
@Override
public void run() {
mHandler.post(new Runnable() {
@Override
public void run() {
Toast.makeText(getApplicationContext(), "Hello world", Toast.LENGTH_SHORT).show();
}
});
}
}
我在模拟器中得到的是,即使我在主屏幕上,吐司也会每 10 秒显示一次。Doze 不会将所有未列入白名单的后台服务/应用程序限制为 15 分钟的唤醒时间吗?
解决方案
打盹仅在屏幕关闭时发生,并且已经持续了最短时间。它与背景无关。
此外,服务设置的定时器或线程不会自动取消,因为 1)操作系统不知道它们,2)无法知道这样做是否安全,或者这样做是否会导致死锁或其他错误。它们可能会延迟到 Doze 允许的执行速度,但不会停止。
推荐阅读
- bash - 如何递归更新文件名
- android - 如何将 gradle buildTypes 配置为仅在 jest 测试通过时运行?
- c - 加倍数字
- debugging - 是否有任何与 GDB 的“info proc mappings”等效的 LLDB 命令来显示进程的所有内存映射?
- celery - 如何在 celery beat 发布的 celery 任务中向消息或标头添加客户价值
- java - Javac JOptionPane 找不到符号:showMesssageDialog
- jsrender - JSViews 可观察数组在删除/添加和排序时不会刷新视图
- python - 数据框在读取 CSV 文件时导入列的第一个值作为列名
- git - 如何通过 azure devops 控制 REPO 中的变量值?
- php - 尝试使用“file_get_contents”,但不适用于特定网站