由于您的目标是 API 10,因此串行线程池不适用于您的 AsyncTask,但您可以创建自己的。您可以将其扩展到您可能需要的任何 AsyncTask 功能...
首先,创建将串行执行事物的线程池,也就是单个线程。
public enum SerialTaskExecutor {
INSTANCE;
public static SerialThreadPool getInstance() {
return INSTANCE;
}
private final ExecutorService mExecutor;
private final Handler mMainHandler;
private SerialThreadPool() {
mExecutor = Executors.newSingleThreadExecutor();
mMainHandler = new Handler(Looper.getMainLooper());
}
public void executeTask(final SerialTask<P, R> t, final P... params){
if(t == null){
return;
}
mExecutor.execute(new Runnable(){
@Override
public void run(){
final R result = t.doInBackground(params);
mMainHandler.post(new Runnable(){
@Override
public void run(){
t.onMainThread(result);
}
});
}
});
}
}
然后定义你的串行任务接口:
public interface SerialTask<P, R> {
public R doInBackground(P... params);
public void onMainThread(R result);
}
最后,不是实现 AsyncTask,而是实现 SerialTask:
public MyTextTask implements SerialTask<String, Void> {
@Override
public Void doInBackground(String... params) {
// do my string processing here
return null;
}
@Override
public void onMainThread(Void result)
// update ui here
}
}
现在你的简单 sn-p 变成:
String text1="text1";
String text2="text2";
SerialTaskExecutor exe = SerialTaskExecutor.getInstance();
exe.executeTask(new MyTextTask(), text1);
exe.executeTask(new MyTextTask(), text2);