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

AsyncTask实现原理和内部代码

 2011-07-01 20:49:38 来源:本站整理   
核心提示: e.getCause()); } catch (CancellationException e) { message = sHandler.obtainMessage(MESSAGE_POST_CANCEL, new AsyncTaskResult<Result>(AsyncTask.this,

               e.getCause());
         } catch (CancellationException e) {
           message = sHandler.obtainMessage(MESSAGE_POST_CANCEL,
               new AsyncTaskResult<Result>(AsyncTask.this, (Result[]) null)); 

         message.sendToTarget();
           return;
         } catch (Throwable t) {
           throw new RuntimeException("An error occured while executing "
               + "doInBackground()", t);
         }

       message = sHandler.obtainMessage(MESSAGE_POST_RESULT,
             new AsyncTaskResult<Result>(AsyncTask.this, result)); //执行完后通过Handler通知结果
         message.sendToTarget();
       }
     };
   }

   public final Status getStatus() {
     return mStatus;
   }

   protected abstract Result doInBackground(Params... params);

   protected void onPreExecute() {
   }

   protected void onPostExecute(Result result) {
   }

protected void onProgressUpdate(Progress... values) {
   }

   protected void onCancelled() {
   }

   public final boolean isCancelled() {
     return mFuture.isCancelled();
   }

   public final boolean cancel(boolean mayInterruptIfRunning) {
     return mFuture.cancel(mayInterruptIfRunning);
   }

   public final Result get() throws InterruptedException, ExecutionException {
     return mFuture.get();
   }

   public final Result get(long timeout, TimeUnit unit) throws InterruptedException,
       ExecutionException, TimeoutException {
     return mFuture.get(timeout, unit);
   }

   public final AsyncTask<Params, Progress, Result> execute(Params... params) {
     if (mStatus != Status.PENDING) {
       switch (mStatus) {
         case RUNNING:
           throw new IllegalStateException("Cannot execute task:"
               + " the task is already running.");
         case FINISHED:
           throw new IllegalStateException("Cannot execute task:"
               + " the task has already been executed "

Tags:AsyncTask 实现 原理

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