(我希望你在上面的例子中用返回的值澄清)所以这是你的任务的几种单一解决方案。仔细观察新线程中的运行任务。你需要在后台执行你的行动ThreadPool ….
注意! (也希望你使用背景线程来澄清,例如,使用你的代码上面的函数.execute() – 不会启动新的线程,但只是把新的任务从BlockingQueue执行静态ThreadPool)
那么下一步是什么?
使用函数.get()来执行MainThread中的任务,您需要在当前操作循环中发布此任务。你会帮助Handler和Looper。并回答你的问题,你应该知道,你只有一个方法来完成这个任务。在后台线程中使用方法.execute()启动动作,并使用方法.get()启动新的任务给Handler。就这些!
如果你想知道一些实现的例子,有很多种解决方案。我刚刚发布单个使用Handler和HandlerThread来低估这个例子的工作。
public class MyLibrary extend HandlerThread {
private static Handler backgroundHandler;
private static Handler foregroundHandler;
private static MyLibrary myLibrary
private MyLibrary () {
super(MyLibrary.class.getSimpleName());
start();
}
public static MyLibrary getInstance() {
if (myLibrary == null) {
synchronized (MyLibrary.class) {
if (myLibrary == null) {
myLibrary = new MyLibrary();
}
}
}
return myLibrary;
}
public static WorkingTask with (Context context) {
//Just update, if there are null
if (foregroundHandler == null) {
foregroundHandler = new Handler(context.getMainLooper);
}
if (backgroundHandler == null) {
backgroundHandler = new Handler(getLooper);
}
return new WorkingTask();
}
public void getBackgroundHandler () {
return backgroundHandler;
}
public void getForegroundHandler () {
return foregroundHandler;
}
}
// ..........
public class WorkingTask {
private Runnable workingRunnable;
public performTask (Runnable run) {
this.workingRunnable = run;
return this;
}
public void execute () {
MyLibrary.getInstance().getBackgoundHandler()
.postRunnable(workingRunnable)
}
public void get () {
MyLibrary.getInstance().getForegroundHanlder()
.postRunnable(workingRunnable)
}
}