Próbuję określić porządek chronologiczny MotionEvent vs coś, co dzieje się okresowo w moim obiekcie UI.
private var rotateFinishTime: Long = -1
....
fun somethingHappensPeriodically() {
Log.d(tag_, "show new round")
...
this.rotateFinishTime = SystemClock.elapsedRealtime()
}
Mam dołączony GestureDetector.OnGestureListener:
override fun onSingleTapConfirmed(gd: GestureDetector, e: MotionEvent): Boolean {
// for tap: since it comes delayed, have to check event time
if (e.downTime < this.rotateFinishTime || this.rotating) {
Log.d(tag_, "e.downTime: $e.downTime rotateFinishTime: $rotateFinishTime downTime - rotateFinishTime: ${e.downTime - rotateFinishTime} rotating: $rotating")
return true
}
... do stuff
}
e.downTime: 4763800 rotateFinishTime: 18832541 downTime - rotateFinishTime: -14068741 obracanie: fałsz
Tak więc upływające czasy w czasie rzeczywistym nie wydają się byćpodstawa czasu. Oczywiście, czas epoki unix też nie pasuje. Interesująca notka: obliczenia dają "oczekiwane" wyniki na emulatorze qemu, ale nie na moim urządzeniu z zapasem systemu Android 6.0.
Odpowiedzi:
0 dla odpowiedzi № 1Myślę, że znalazłem to: powinienem zadzwonić SystemClock.uptimeMillis()
dokonać ważnego porównania. Dokumentacja jest ukryta w InputEvent, nie recytuje ani nie odtwarza w MotionEvent:
/ ** * Odzyskaj czas wystąpienia tego zdarzenia, * w{@link android.os.SystemClock # uptimeMillis} podstawa czasu. * * @return Zwraca czas wystąpienia zdarzenia, * w bazie czasowej {@link android.os.SystemClock # uptimeMillis}. * /
Oczywiście emulator nigdy nie zapadł w głęboki sen!