Fixed cancel() not working correctly
The method handleMessage(Message msg) from mHandler variable was not checking if the timer was cancelled, so sendMessageDelayed(obtainMessage(MSG), delay) was keeping the timer alive. The patch simply adds a boolean and checks if the CountDownTimer was cancelled before calling sendMessageDelayed(obtainMessage(MSG), delay) bug: https://code.google.com/p/android/issues/detail?id=58668 Change-Id: Ic6bbb9d33a3616f8503db222513cc14ad2270cb8 Signed-off-by: jl1990 <jlcarrasco1990@gmail.com>
This commit is contained in:
@@ -16,8 +16,6 @@
|
||||
|
||||
package android.os;
|
||||
|
||||
import android.util.Log;
|
||||
|
||||
/**
|
||||
* Schedule a countdown until a time in the future, with
|
||||
* regular notifications on intervals along the way.
|
||||
@@ -56,6 +54,11 @@ public abstract class CountDownTimer {
|
||||
private final long mCountdownInterval;
|
||||
|
||||
private long mStopTimeInFuture;
|
||||
|
||||
/**
|
||||
* boolean representing if the timer was cancelled
|
||||
*/
|
||||
private boolean mCancelled = false;
|
||||
|
||||
/**
|
||||
* @param millisInFuture The number of millis in the future from the call
|
||||
@@ -72,7 +75,8 @@ public abstract class CountDownTimer {
|
||||
/**
|
||||
* Cancel the countdown.
|
||||
*/
|
||||
public final void cancel() {
|
||||
public synchronized final void cancel() {
|
||||
mCancelled = true;
|
||||
mHandler.removeMessages(MSG);
|
||||
}
|
||||
|
||||
@@ -80,6 +84,7 @@ public abstract class CountDownTimer {
|
||||
* Start the countdown.
|
||||
*/
|
||||
public synchronized final CountDownTimer start() {
|
||||
mCancelled = false;
|
||||
if (mMillisInFuture <= 0) {
|
||||
onFinish();
|
||||
return this;
|
||||
@@ -112,6 +117,10 @@ public abstract class CountDownTimer {
|
||||
public void handleMessage(Message msg) {
|
||||
|
||||
synchronized (CountDownTimer.this) {
|
||||
if (mCancelled) {
|
||||
return;
|
||||
}
|
||||
|
||||
final long millisLeft = mStopTimeInFuture - SystemClock.elapsedRealtime();
|
||||
|
||||
if (millisLeft <= 0) {
|
||||
|
||||
Reference in New Issue
Block a user