두 개의 Android 기기간에 시간을 동기화하려고합니다. 정밀도는 최대 5ms 여야합니다. gps와 네트워크 시간이 이처럼 정확하지 않아서 로컬 네트워크를 통해 장치간에 시간을 공유하고 PTP (Precision time protocol)를 사용하여 시간을 동기화하는 것에 대해 생각했습니다. 지금은 뿌리가 맞지 않는 기기의 시간을 변경할 수 없기 때문에 기기에서 공유하는 시차를 절약하고 사용자에게 텍스트보기로 시간을 보여 주겠다고 생각했습니다. 이제 사용자가 ms 단위로 시간을 볼 수 있도록 textview를 매 1ms마다 업데이트해야했습니다. ms마다 업데이트되는 스레드에서 textview를 업데이트 중입니다. 문제가 시간을 동기화 한 후, 시간은 diff 미만 5 밀리 것을 제공하지만, 시간 동기화의 시간이 후 일부를 표류하기 시작하고 10 ~ 15 분 후 시간은 diff입니다Android에서 동기화 시간이
class CountDownRunner implements Runnable {
// @Override
public void run() {
Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
while (!Thread.currentThread().isInterrupted()) {
try {
setCurrentTime();
Thread.sleep(1); // Pause of 1/100 Second
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
} catch (Exception e) {
}
}
}
}
입니다 1 초 이상. 이 문제를 해결하는 방법에 대한 아이디어가 있으십니까?
elapsedRealtime()
전화의 현재 값이 "사용자가 너무 MS의 시간을 볼 수 있도록 이제 텍스트 뷰는 모두 MS를 업데이트 할 필요"- 첫째, 인간은 SECON 1000 명 변경 볼 수 없습니다 디. 둘째, Android는 실시간 운영체제가 아닙니다. 'Thread.sleep()'는 CPU가 다른 쓰레드를 수행하는 중일 수 있기 때문에 정확히 밀리 초 단위로 반환하지 않습니다. – CommonsWare매 초마다 UI를 업데이트하려고했지만 여전히 드리프트가 있습니다. thread.sleep (1000)을 thread.sleep (1003 또는 1004)처럼 작동시키는 것처럼 보이고 이러한 변경 사항이 더 커지면 더 큰 드리프트가 만들어집니다. . Thread.currentThread()를 사용합니다.setPriority (Thread.MAX_PRIORITY); 도와주지 않을거야? –