Android 在后台运行服务时出现意外行为

Android 在后台运行服务时出现意外行为,android,service,timer,background-process,Android,Service,Timer,Background Process,在我的应用程序中,我有一个服务。它在主活动启动时启动,并执行以下操作: timer.scheduleAtFixedRate ( new TimerTask() { public void run() { appendToFile("diff: "+(System.currentTimeMillis()-lastTime)); lastTime = System.currentTimeMillis(); }

在我的应用程序中,我有一个服务。它在主活动启动时启动,并执行以下操作:

timer.scheduleAtFixedRate (
    new TimerTask() {
        public void run() {
            appendToFile("diff: "+(System.currentTimeMillis()-lastTime));
            lastTime = System.currentTimeMillis();
        }
    }, 0, 1);
基本上,它会创建一个
计时器,每毫秒更新一次。每次更新时,计时器都会查看上次调用它的时间,并保存计时器调用文件之间的时间间隔。由于系统中总是有开销,我希望每行输出都超过1ms,可能在10左右。
下面是应用程序睡眠时的快照

diff: 6
diff: 8
diff: 5
diff: 81
diff: 12
diff: 12
diff: 54
diff: 60
diff: 5734
diff: 77
diff: 9
diff: 20
diff: 6
diff: 21
diff: 10
diff: 13
diff: 16895
diff: 13
diff: 82
diff: 269
diff: 35
diff: 25
diff: 24
diff: 20
diff: 30
diff: 26
diff: 11
diff: 14
diff: 49
diff: 57
diff: 9
我的问题是关于我有时会得到一些奇怪的结果。中间16895表示当系统空闲时,出于某种原因的服务几乎等待17秒来运行它的任务。然而,紧接着,它显示了10到30毫秒之间更正常的结果。我知道这是在系统睡眠期间,因为日志中有更多的条目。该服务从未被破坏,因为我还记录了对
onDestroy()的所有调用


有没有解释为什么服务会突然暂停?有什么方法可以确保它一直运行吗?

就像你说的,系统正在休眠。当服务从内存中取出时,服务将被“销毁”。休眠系统只是暂时的暂停,因为一旦CPU唤醒,它就会恢复

您可以通过使用来唤醒系统,它将计划在特定时间发生偶数。它会唤醒系统。您还可以使用来保持CPU运行


请注意,保持CPU运行会消耗大量电池,因此只有在您绝对需要的时候才可以节约使用它。

所以它在没有调用onDestroy()的情况下被销毁了?是否有其他方法可以监听系统以捕获“暂停”事件?由于我有一个很短的延迟,在这种情况下使用AlarmManager不会很好地工作。您必须手动注册SCREEN_OFF和SCREEN_ON广播服务,但在SCREEN_OFF广播中启动AlarmManager并在SCREEN_ON广播中取消它。其他参考资料: