package cn.mutils.app.task;
import android.os.Handler;
import android.os.Looper;
import cn.mutils.core.task.IStoppable;
public class DelayTask implements IStoppable {
protected boolean mStopped;
protected Handler mHandler;
protected Runnable mRunnable;
protected Runnable mRunnableWrapper;
protected long mDelay;
public DelayTask(Runnable runnable, long delay) {
mHandler = new Handler(Looper.getMainLooper());
mRunnable = runnable;
mRunnableWrapper = new DelayRunnable();
mDelay = delay;
mStopped = true;
}
@Override
public boolean isRunInBackground() {
return true;
}
@Override
public void setRunInBackground(boolean runInBackground) {
}
@Override
public boolean isStopped() {
return mStopped;
}
@Override
public boolean stop() {
if (mStopped) {
return false;
}
mHandler.removeCallbacksAndMessages(null);
mStopped = true;
return true;
}
/**
* You can call start more than once
*/
public DelayTask start() {
stop();
mHandler.postDelayed(mRunnableWrapper, mDelay);
mStopped = false;
return this;
}
public DelayTask start(long delay) {
mDelay = delay;
return start();
}
class DelayRunnable implements Runnable {
@Override
public void run() {
mStopped = true;
mRunnable.run();
}
}
}