通过阅读它的实际代码,AsyncTask.java
它实际上使用了一个Future
任务,然后是更多。AFuture
是一个在旅途中异步执行的任务。AnAsyncTask
被安排在一个队列上,用于单个(或一组)后台线程。
AnAsyncTask
实际上比Future
任务更“优越”。Future
它在's 的功能之上做了花哨的调度和优化。只需查看 API 介绍级别。Future
从 API 1.0 开始就引入了。该AsyncTask
对象是在 API 3 中引入的。
AsyncTask 有一个 Future 任务,而不是一个 Future。
异步任务.java
/**
* Creates a new asynchronous task. This constructor must be invoked on the UI thread.
*/
public AsyncTask() {
mWorker = new WorkerRunnable<Params, Result>() {
public Result call() throws Exception {
mTaskInvoked.set(true);
Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);
//noinspection unchecked
return postResult(doInBackground(mParams));
}
};
mFuture = new FutureTask<Result>(mWorker) {
@Override
protected void done() {
try {
postResultIfNotInvoked(get());
} catch (InterruptedException e) {
android.util.Log.w(LOG_TAG, e);
} catch (ExecutionException e) {
throw new RuntimeException("An error occured while executing doInBackground()",
e.getCause());
} catch (CancellationException e) {
postResultIfNotInvoked(null);
}
}
};
}