首页 > 解决方案 > 打瞌睡不限制服务

问题描述

我有一个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 分钟的唤醒时间吗?

标签: android

解决方案


打盹仅在屏幕关闭时发生,并且已经持续了最短时间。它与背景无关。

此外,服务设置的定时器或线程不会自动取消,因为 1)操作系统不知道它们,2)无法知道这样做是否安全,或者这样做是否会导致死锁或其他错误。它们可能会延迟到 Doze 允许的执行速度,但不会停止。


推荐阅读