AsyncTask的基本使用
public class MTask extends AsyncTask<Void, Void, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected String doInBackground(Void... voids) {
//doing
return null;
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
}
}
上面的三个参数,
第一个表示我们传递给异步任务执行时的参数的类型,
第二个表示,将执行的进度返回给UI线程的参数类型
第三个表示,返回结果的类型,
上述例子,一二表示不指定,返回结果为String类型。
执行:
MTask task = new MTask(); task.execute();//顺序执行 task.executeOnExecutor(LIMITED_TASK_EXECUTOR);//并发执行
流程分析
一,创建过程
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); } } }; }
初始化了一个WorkerRunnable,一个FutureTask,mFuture持有mWorker。mWorker会执行AsyncTask的doInBackground方法。
二,执行
2.1 task.execute();
@MainThread
public final AsyncTask<Params, Progress, Result> execute(Params... params) {
return executeOnExecutor(sDefaultExecutor, params);
}
@MainThread
public final AsyncTask<Params, Progress, Result> executeOnExecutor(Executor exec,
Params... params) {
if (mStatus != Status.PENDING) {