CountDownTimer for longer time

Implementation for a Countdowntimer that can exists for longer time.

/**
* This class is used to provide user the CountDownTimer that exists *for longer
* interval of time
*/
public class LongRunCountdownTimer {
// Simple Executor that schedule commands to run after a given delay, or to execute periodically.
private final ScheduledExecutorService mScheduler = Executors.newScheduledThreadPool(1);

private long mMaxTime = 0L;
private long mIntervalTime = 0L;
private TimeUnit mTimeUnit = null;

// Reference to interface that allows the calling activity to receive updates after every interval
private UpdateUIListener mUpdateUIListener = null;

// Reference to tasks result from the two calls of schedule operations
private ScheduledFuture<?> mFutureTimedTask = null;
private ScheduledFuture<?> mCompletionTask = null;
private int mSteps = 0;


public LongRunCountdownTimer(long iMaxTime, long iIntervalTime, TimeUnit iTimeUnit, UpdateUIListener iUpdateUIListener) {
mMaxTime = iMaxTime;
mIntervalTime = iIntervalTime;
mUpdateUIListener = iUpdateUIListener;
mTimeUnit = iTimeUnit;
}

// Simple runnable that contains callback sends event to UI thread.
private Runnable mUIUpdater = new Runnable() {
@Override
public void run() {
mSteps++;
mUpdateUIListener.updateUI(mSteps);
}
};

// Simple runnable that defines a task to cancel the scheduled task once completed
    private Runnable mFinalTask = new Runnable() {
@Override
public void run() {
mFutureTimedTask.cancel(true);
}
};

// Method that provides the functionality starts the CountdownTimer
public void start() {
// Scheduling tasks to run periodically
mFutureTimedTask = mScheduler.scheduleAtFixedRate(mUIUpdater, mIntervalTime, mIntervalTime, mTimeUnit);

// Scheduling task to cancel above defined task
mCompletionTask = mScheduler.schedule(mFinalTask, mMaxTime, mTimeUnit);
}

// Method for canceling scheduled tasks explicitly at runtime
public void cancelExplicitly() {
if (mFutureTimedTask != null) {
mFutureTimedTask.cancel(true);
}

if (mCompletionTask != null) {
mCompletionTask.cancel(true);
}
}
}

// *******************************************************

/**
* Interface providing methods that will be implemented by the activity starting the LongRunCountdownTimer
*/
public interface UpdateUIListener{
public abstract void updateUI(int iCtr);
}