有什么机制可以精确睡眠1分钟精度吗?

问题描述 投票:0回答:1

我正在开发一个每分钟都应该运行的库。有时该库不会在给定时间唤醒。它会在延迟后唤醒。 时间戳示例如下:

12:00:00:250
12:01:00:250
12:02:00:249
12:03:15:350
12:04:39:751

首先我使用Thread.sleep,经过一番研究后我将其更改为ScheduledExecutorService。我认为应该解决它。但同样的场景仍在发生。

Runnable runnable = new Runnable() {
   @Override
    public void run() {
       //do something
    }};

    ScheduledExecutorService ses = Executors.newScheduledThreadPool(1);
    ses.scheduleAtFixedRate(runnable, 0, 60 * 1000, TimeUnit.MILLISECONDS);

经过一些研究,我发现这可能与深度睡眠模式有关。(顺便说一句,使用我的库的主应用程序具有唤醒锁)。我尝试强制进入睡眠模式:

adb shell dumpsys deviceidle force-idle

但它在睡眠模式下没有发生。它可能会在随机情况下发生,或者我无法找到真正的原因。 注意:我们正在使用 android 10 aosp 设备。它不是商店应用程序。 我能用什么来保证如此精确的睡眠呢?或者什么可能导致这个问题?

android multithreading wakelock scheduledexecutorservice android-doze
1个回答
0
投票

尝试使用 AlarmManager.setAlarmClock

© www.soinside.com 2019 - 2024. All rights reserved.