Android应用程序线程消息循环模型分析(6)
-
private static class AsyncTaskResult<Data> {
-
final AsyncTask mTask;
-
final Data[] mData;
-
-
AsyncTaskResult(AsyncTask task, Data... data) {
-
mTask = task;
-
mData = data;
-
}
-
}
最后把这个AsyncTaskResult对象封装成一个消息,并且通过消息处理器sHandler加入到应用程序主线程的消息队列中:
-
message = sHandler.obtainMessage(MESSAGE_POST_RESULT,
-
new AsyncTaskResult<Result>(AsyncTask.this, result));
-
message.sendToTarget();
-
private static class InternalHandler extends Handler {
-
@SuppressWarnings({"unchecked", "RawUseOfParameterizedType"})
-
@Override
-
public void handleMessage(Message msg) {
-
AsyncTaskResult result = (AsyncTaskResult) msg.obj;
-
switch (msg.what) {
-
case MESSAGE_POST_RESULT:
-
// There is only one result
-
result.mTask.finish(result.mData[0]);
-
break;
-
......
-
}
-
}
-
}
-
private void finish(Result result) {
-
......
-
onPostExecute(result);
-
......
-
}
在任务执行的过程当中,即执行doInBackground函数时候,可能通过调用publishProgress函数来将中间结果封装成一个消息发送到应用程序主线程中的消息队列中去:
-
protected final void publishProgress(Progress... values) {
-
sHandler.obtainMessage(MESSAGE_POST_PROGRESS,
-
new AsyncTaskResult<Progress>(this, values)).sendToTarget();
-
}
-
private static class InternalHandler extends Handler {
-
@SuppressWarnings({"unchecked", "RawUseOfParameterizedType"})
-
@Override
-
public void handleMessage(Message msg) {
-
AsyncTaskResult result = (AsyncTaskResult) msg.obj;
-
switch (msg.what) {
-
......
-
case MESSAGE_POST_PROGRESS:
-
result.mTask.onProgressUpdate(result.mData);
-
break;
-
......
-
}
-
}
-
}