如何将MotionEvent停机时间与时钟进行比较,时间基准是多少?

我正在尝试确定一个MotionEvent与我的UI对象中定期发生的事件的时间顺序。

private var rotateFinishTime: Long = -1 .... fun somethingHappensPeriodically() { Log.d(tag_, "show new round") ... this.rotateFinishTime = SystemClock.elapsedRealtime() } 

我附加了一个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 rotate:false

所以实时时间似乎不是时间基准。 显然,unix时代并不适合。 有趣的是:这个计算在qemu模拟器上产生了“预期”的结果,但在我的Android 6.0版本设备上并没有闪现。

我想我找到了它:我应该调用SystemClock.uptimeMillis()进行有效的比较。 文档被埋在InputEvent中,他们不会在MotionEvent上背诵或重复:

/ ** *检索此事件发生的时间,*在{@link android.os.SystemClock#uptimeMillis}时间基础上。 * * @return返回此事件发生的时间,*在{@link android.os.SystemClock#uptimeMillis}时基中。 * /

显然,模拟器从来没有深入睡眠!