package com.netease.nim.uikit.common.framework;
import android.os.Handler;
import com.netease.nim.uikit.NimUIKit;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
/**
* Created by huangjun on 2015/3/12.
*/
public class NimSingleThreadExecutor {
private static NimSingleThreadExecutor instance;
private Handler uiHander;
private Executor executor;
private NimSingleThreadExecutor() {
uiHander = new Handler(NimUIKit.getContext().getMainLooper());
executor = Executors.newSingleThreadExecutor();
}
public synchronized static NimSingleThreadExecutor getInstance() {
if (instance == null) {
instance = new NimSingleThreadExecutor();
}
return instance;
}
public <T> void execute(NimTask<T> task) {
if (executor != null) {
executor.execute(new NimRunnable<>(task));
}
}
public void execute(Runnable runnable) {
if (executor != null) {
executor.execute(runnable);
}
}
/**
* ****************** model *************************
*/
public interface NimTask<T> {
T runInBackground();
void onCompleted(T result);
}
private class NimRunnable<T> implements Runnable {
public NimRunnable(NimTask<T> task) {
this.task = task;
}
private NimTask<T> task;
@Override
public void run() {
final T res = task.runInBackground();
if (uiHander != null) {
uiHander.post(new Runnable() {
@Override
public void run() {
task.onCompleted(res);
}
});
}
}
}
}