Here is an example of timer, it can start and pause and destroy based on current lifecycle of attached Activity, Fragment or even an lifecycle aware .
/**
* @implNote An implementation of lifecycle aware timer, can be attached to Activity or fragment
*/
public class LifecycleAwareTimer implements Runnable, DefaultLifecycleObserver {
public interface OnIntervalListener extends LifecycleOwner {
void onTimerInterval();
}
private final Handler mHandler = new Handler(Looper.getMainLooper());
private final long mInterval;
private final OnIntervalListener mOnIntervalListener;
public LifecycleAwareTimer(long interval, @NonNull OnIntervalListener onIntervalListener) {
mInterval = interval;
mOnIntervalListener = onIntervalListener;
mOnIntervalListener.getLifecycle().addObserver(this);
}
@Override
public void run() {
mOnIntervalListener.onTimerInterval();
}
@Override
public void onResume(@NonNull LifecycleOwner owner) {
mHandler.removeCallbacksAndMessages(null);
mHandler.postDelayed(this, mInterval);
}
@Override
public void onPause(@NonNull LifecycleOwner owner) {
mHandler.removeCallbacksAndMessages(null);
}
@Override
public void onDestroy(@NonNull LifecycleOwner owner) {
mHandler.removeCallbacksAndMessages(null);
mOnIntervalListener.getLifecycle().removeObserver(this);
}
}