我正在嘗試創建一個每秒記錄一次跑步者位置的Android應用程序。但是,我發現它完成後需要稍多於一秒的時間。正好循環一秒
這裏是我的代碼:
Runnable run = new Runnable() {
@Override
public void run() {
Long start = SystemClock.elapsedRealtime();
if (getIfRunning() == true) {
try {
if (location2 != null) {
Float distanceFromLast = totalDistance(location2);
addToDistance(distanceFromLast);
}
getCoords();
mMap.clear();
markOldCoords();
writeCoords();
setCount();
updateScreen();
} catch (Exception e) {
}
}
Long time = SystemClock.elapsedRealtime() - start;
handler.postDelayed(this, 1000 - time);
}
};
handler.post(run);
[Javadoc](http://developer.android.com/reference/android/os/Handler.html#postDelayed%28java.lang.Runnable,%20long%29):*導致Runnable r被添加到消息隊列,在**經過指定的時間後運行** *因此,在指定的時間,它不會在指定的時間運行*完全*。 – Andreas
你可以做的一件事是......創建你自己的'HandlerThread',並將你的'Handler'基於此。爲什麼?如果使用'Handler'的默認構造函數,那麼使用UI線程很可能(取決於構建它的位置)。那麼,許多其他的東西也會使用這個線程,所以你的'Runnable'必須滿足該線程的其他用法。 –
大病請嘗試!感謝您的幫助 –