-abstract class BaseDAO<T> {
- abstract void insertSync(T item);
- public void insert(T item, @Nullable Runnable onDone) {
- AsyncTask.execute(() -> {
- insertSync(item);
- if (onDone != null)
- new Handler(Looper.getMainLooper()).post(onDone);
+import java.util.concurrent.Executor;
+import java.util.concurrent.Executors;
+
+public abstract class BaseDAO<T> {
+ private final static Executor asyncRunner = Executors.newSingleThreadExecutor();
+ public static void runAsync(Runnable runnable) {
+ asyncRunner.execute(runnable);
+ }
+ abstract long insertSync(T item);
+ public void insert(T item) {
+ asyncRunner.execute(() -> insertSync(item));
+ }
+ public void insert(T item, @NonNull OnInsertedReceiver receiver) {
+ asyncRunner.execute(() -> {
+ long id = insertSync(item);
+ Misc.onMainThread(() -> receiver.onInsert(id));