package im.actor.runtime.android.threading;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.SystemClock;
import im.actor.runtime.threading.DispatchCancel;
import im.actor.runtime.threading.Dispatcher;
public class AndroidDispatcher implements Dispatcher {
private HandlerThread handlerThread;
private Handler handler;
public AndroidDispatcher(String name) {
handlerThread = new HandlerThread(name, Thread.NORM_PRIORITY);
handlerThread.start();
// Wait for Looper ready
while (handlerThread.getLooper() == null) {
}
handler = new Handler(handlerThread.getLooper());
}
@Override
public DispatchCancel dispatch(final Runnable message, long delay) {
final Object o = new Object();
handler.postAtTime(message, o, SystemClock.uptimeMillis() + delay);
return () -> handler.removeCallbacks(message, o);
}
}