AsyncTask<Params, Progress, Result>中三个参数为:
Params 输入数据
Progress 过程数据
Result 结果数据
工作队列 LinkedlockingQueue 的特性
线程从空的LinkedlockingQueue中取任务执行,线程会被阻塞;
线程向一个满的LinkedlockingQueue中添加任务,同样会被阻塞。
onProgressUpdate 和 onPostExecute执行与界面相关的操作。
InternalHandler:
case MESSAGE_POST_RESULT:
result.mTask.finish(result.mData[0]);
case MESSAGE_POST_PROGRESS:
result.mTask.onProgressUpdate(result.mData);
case MESSAGE_POST_CANCEL:
result.mTask.onCancelled();
异步任务的创建过程:
执行过程:
调用execute方法
在执行过程中,会调用内部一个Callable对象的成员函数call来执行一个具体工作任务
具体任务的执行在doInBackground中
如果异步任务需要执行与界面相关的操作,需要调用publishProgress,该方法会想想sHandler发送一个 MESSAGE_POST_PROGRESS消息,交给 onProgressUpdate来处理。
FutureTask成员函数done被调用
done首先调用AsynTask.get方法获取当前工作任务的结果数据,并将其封装为 MESSAGE_POST_RESULT消息
AsynTask.finish方法处理 MESSAGE_POST_RESULT消息。