gpt4 book ai didi

Android Thread.sleep 有时会等待太久

转载 作者:太空宇宙 更新时间:2023-11-03 11:58:45 31 4
gpt4 key购买 nike

编辑:

这里说的不是精度问题,从下面的代码和日志可以看出,我要求休眠1秒,结果快200秒了,有时候还会跳到600秒,这不能精度问题..


我以前使用 handlerthread,有时发布到 handler 的作业没有按时开始,为了获得更多详细信息,我将其更改为基本线程,结果发现 Thread.sleep() 是问题所在,但我我不确定如何解决这个问题,可能的原因是什么?

hGpsThread = new Thread(mGpsWorker);
hGpsThread.start();

private final Runnable mGpsWorker = new Runnable() {
@Override
public void run() {
long lastGpsRequestTime = 0;
l.Write("GPS thread started.");
while (isRunning) {
l.Write("GPS thread loop start.");
try {
long currentTimeMillis = System.currentTimeMillis();
if (currentTimeMillis >= lastGpsRequestTime + gpsUpdateInterval) {
l.Write("Requesting location update");
gpslib.getLocation();
lastGpsRequestTime = currentTimeMillis;
}
l.Write("GPS thread before sleep");
Thread.sleep(1000);
l.Write("GPS thread after sleep");
} catch (InterruptedException e) {
}
l.Write("GPS thread loop end.");
}
l.Write("GPS thread ended.");
}
};

注意:getLocation() 使用来自另一个线程的循环程序调用 requestLocationUpdates,因此据我所知,位置更新不应影响此线程。

getLocation() 还创建一个计时器并安排超时,这可能是问题所在吗?据我了解,这应该不是问题。

这是日志:(这只是偶尔发生,假设机会接近 0.5%)

Wed Jul 10 11:45:46 AEST 2013 GPS thread loop start.
Wed Jul 10 11:45:46 AEST 2013 GPS thread before sleep
Wed Jul 10 11:49:04 AEST 2013 GPS thread after sleep
Wed Jul 10 11:49:04 AEST 2013 GPS thread loop end.

谢谢

测试环境为:HTC Aria,Android 2.2而且看起来它只在使用电池运行时发生,但我的应用程序在充电状态下的行为并没有不同。

最佳答案

基本上 Thread.sleep()Handlers 只要屏幕打开就可以正常工作(意味着 Android 不应该处于深度 sleep 状态/屏幕关闭状态) .

当屏幕关闭时,默认的 Android 行为是挂起 Thread.sleep() 和 Handlers() 直到屏幕再次打开或者它被某个应用程序获取唤醒锁唤醒。因此,如果屏幕始终处于打开状态,您的应用程序将完美运行,但当屏幕关闭时,它会表现不稳定。

最好的解决方法是切换到 AlarmManager,因为当 Alarm 被触发时,onRecieve() 默认情况下总是获取唤醒锁,从而导致 Android 唤醒并执行。

关于Android Thread.sleep 有时会等待太久,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17561380/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com