WEB开发网
开发学院手机开发Android 开发 AsyncTask实现原理和内部代码 阅读

AsyncTask实现原理和内部代码

 2011-07-01 20:49:38 来源:本站整理   
核心提示: + "(a task can be executed only once)"); } } mStatus = Status.RUNNING; onPreExecute(); mWorker.mParams = params; sExecutor.execute(mFuture);

               + "(a task can be executed only once)");
       }
     }

   mStatus = Status.RUNNING;

   onPreExecute();

   mWorker.mParams = params;
     sExecutor.execute(mFuture);

   return this;
   }

   protected final void publishProgress(Progress... values) { //通过Handler通知UI刷新
     sHandler.obtainMessage(MESSAGE_POST_PROGRESS,
         new AsyncTaskResult<Progress>(this, values)).sendToTarget();
   }

   private void finish(Result result) {
     if (isCancelled()) result = null;
     onPostExecute(result);
     mStatus = Status.FINISHED;
   }

   private static class InternalHandler extends Handler { //和我们的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;
         case MESSAGE_POST_PROGRESS:
           result.mTask.onProgressUpdate(result.mData);
           break;
         case MESSAGE_POST_CANCEL:
           result.mTask.onCancelled();
           break;
       }
     }
   }

   private static abstract class WorkerRunnable<Params, Result> implements Callable<Result> {
     Params[] mParams;
   }

   @SuppressWarnings({"RawUseOfParameterizedType"})
   private static class AsyncTaskResult<Data> {
     final AsyncTask mTask;
     final Data[] mData;

   AsyncTaskResult(AsyncTask task, Data... data) {
       mTask = task;
       mData = data;
     }
   }
}

 经过上面的简单分析相信大家对Android AsyncTask会有更加深刻的理解,整个AsyncTask实现基于Thread+Handler,但对于Thread使用的是Java的并发包的FutureTask具体的可以参考JDK5以后的源码。

上一页  1 2 3 

Tags:AsyncTask 实现 原理

编辑录入:coldstar [复制链接] [打 印]
赞助商链接