diff options
| author | 2016-11-16 08:18:30 +0000 | |
|---|---|---|
| committer | 2016-11-16 08:18:30 +0000 | |
| commit | 9f0cc266ce80553d39fdfda23567b7968e70b26e (patch) | |
| tree | 53dc160652a816758cb127cc951b5d2316123680 | |
| parent | 5c152a3d7f7bcd003a833b8ebe4a2d1eeb33df11 (diff) | |
| parent | 9997fcc72cf3d9441db91582ae758e6eec594645 (diff) | |
Merge "CountDownTimer: not skip onTick()" am: 224d9e48fa
am: 9997fcc72c
Change-Id: Ie09949fbc23ad87e159e063a59983a1a6bff98f8
| -rw-r--r-- | core/java/android/os/CountDownTimer.java | 25 |
1 files changed, 17 insertions, 8 deletions
diff --git a/core/java/android/os/CountDownTimer.java b/core/java/android/os/CountDownTimer.java index 58acbcf5684b..c7bf0fd6ba49 100644 --- a/core/java/android/os/CountDownTimer.java +++ b/core/java/android/os/CountDownTimer.java @@ -125,19 +125,28 @@ public abstract class CountDownTimer { if (millisLeft <= 0) { onFinish(); - } else if (millisLeft < mCountdownInterval) { - // no tick, just delay until done - sendMessageDelayed(obtainMessage(MSG), millisLeft); } else { long lastTickStart = SystemClock.elapsedRealtime(); onTick(millisLeft); // take into account user's onTick taking time to execute - long delay = lastTickStart + mCountdownInterval - SystemClock.elapsedRealtime(); - - // special case: user's onTick took more than interval to - // complete, skip to next interval - while (delay < 0) delay += mCountdownInterval; + long lastTickDuration = SystemClock.elapsedRealtime() - lastTickStart; + long delay; + + if (millisLeft < mCountdownInterval) { + // just delay until done + delay = millisLeft - lastTickDuration; + + // special case: user's onTick took more than interval to + // complete, trigger onFinish without delay + if (delay < 0) delay = 0; + } else { + delay = mCountdownInterval - lastTickDuration; + + // special case: user's onTick took more than interval to + // complete, skip to next interval + while (delay < 0) delay += mCountdownInterval; + } sendMessageDelayed(obtainMessage(MSG), delay); } |