2017-10-26 9 views
0

내 UI 개체에서 주기적으로 발생하는 이벤트와 MotionEvent의 시간 순서를 결정하려고합니다.MotionEvent 중단 시간을 시계와 비교하는 방법, 시간 기준은 무엇입니까?

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 : 4,763,800 rotateFinishTime : 18832541 다운 타임 - rotateFinishTime : -14068741 회전 : 그래서 거짓

경과 된 실시간은 시간 기반으로 보이지 않습니다. 분명히, 유닉스 신기원 시간은 어느쪽에도 맞지 않는다. 재미있는 메모 : 계산은 qemu 에뮬레이터에서 "예상 된"결과를 생성하지만, Android Android 6.0이 플래시 된 장치에서는 발생하지 않습니다.

답변

0

나는 그것을 발견했다고 생각한다 : SystemClock.uptimeMillis()을 호출하여 유효한 비교를해야한다. 문서가되는 InputEvent에 묻혀, 그들은 암송하거나 MotionEvent에 그것을 반복하지 않습니다

/** *이 *은 {@link android.os.SystemClock # uptimeMillis에서 를이 이벤트가 발생한 시간을 검색 } 시간 기준. * * @return이 이벤트가 발생한 시간, *을 android.os.SystemClock # uptimeMillis} 시간 기준으로 반환합니다. */

물론 에뮬레이터는 절대로 깊은 수면에 들어 가지 않았습니다.