diff options
| author | 2016-11-16 07:55:26 +0000 | |
|---|---|---|
| committer | 2016-11-16 07:55:27 +0000 | |
| commit | 224d9e48fab1a83d16f9132a42d8a747651b0529 (patch) | |
| tree | 4ad360761383d1018db426abed061faca008752e | |
| parent | 1813ae0159cda05a6882c77714f25718fc67c311 (diff) | |
| parent | 0c3149191fbbfdc5242f8dd8a02f561f1ce604c3 (diff) | |
Merge "CountDownTimer: not skip onTick()"
| -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); } |