package droidkit.concurrent; import android.os.Handler; import android.os.Looper; import android.support.annotation.NonNull; import java.util.concurrent.Callable; import java.util.concurrent.ExecutorService; import java.util.concurrent.Future; /** * @author Daniel Serdyukov */ public class MainQueue implements ExecQueue { private MainQueue() { } public static MainQueue get() { return Holder.INSTANCE; } public static Handler getHandler() { return HandlerHolder.INSTANCE; } @NonNull @Override public <V> Future<V> invoke(@NonNull Callable<V> task) { return invoke(task, 0); } @NonNull @Override public Future<?> invoke(@NonNull Runnable task) { return invoke(task, 0); } @NonNull public <V> Future<V> invoke(@NonNull Callable<V> task, long delay) { final MainFuture<V> future = new MainFuture<>(getHandler(), task); getHandler().postDelayed(future, delay); return future; } @NonNull public Future<?> invoke(@NonNull Runnable task, long delay) { final MainFuture<?> future = new MainFuture<>(getHandler(), task); getHandler().postDelayed(future, delay); return future; } @NonNull @Override public ExecutorService getExecutor() { throw new UnsupportedOperationException("MainQueue has no Executor"); } private static final class Holder { public static final MainQueue INSTANCE = new MainQueue(); } private static final class HandlerHolder { public static final Handler INSTANCE = new Handler(Looper.getMainLooper()); } }