天天看点

Android 中文 API (101) —— AsyncTask

正文

  一、结构

public abstract class AsyncTask extends Object

java.lang.Object

android.os.AsyncTask<Params, Progress, Result>

  二、类概述

  AsyncTask能够适当地、简单地用于 UI线程。 这个类不需要操作线程(Thread)就可以完成后台操作将结果返回UI。

  异步任务的定义是一个在后台线程上运行,其结果是在 UI线程上发布的计算。 异步任务被定义成三种泛型类型:Params,Progress和 Result;和四个步骤: begin , doInBackground,processProgress 和end。

  三、用法

 private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> {

     protected Long doInBackground(URL... urls) {

         int count = urls.length;

         long totalSize = 0;

         for (int i = 0; i < count; i++) {

             totalSize += Downloader.downloadFile(urls[i]);

             publishProgress((int) ((i / (float) count) * 100));

         }

         return totalSize;

     }

     protected void onProgressUpdate(Integer... progress) {

         setProgressPercent(progress[0]);

     protected void onPostExecute(Long result) {

         showDialog("Downloaded " + result + " bytes");

 }

     一旦创建,一个任务执行起来就非常简单:

 new DownloadFilesTask().execute(url1, url2, url3);

  四、AsyncTask的泛型类型 

  这三个类型被用于一个异步任务,如下:

  1. Params,启动任务执行的输入参数

  2. Progress,后台任务执行的百分比

  3. Result,后台计算的结果类型

 private class MyTask extends AsyncTask<Void, Void, Void> { ... }

  五、4个步骤

    当一个异步任务被执行,任务经过四各步骤:

  六、线程规则 

  有一些线程规则必须去遵守,这个类才会正确的工作:

    任务实例必须创建在 UI线程

    这个任务只执行一次(如果执行第二次将会抛出异常)

  七、内部类

      enum       AsyncTask.Status  

  表示任务的当前状态

  八、构造函数

        public AsyncTask ()

  创建一个新的异步任务。这个构造函数必须在UI线程上调用。

  九、公共方法

  public final boolean cancel (boolean mayInterruptIfRunning)

  尝试取消这个任务的执行,如果这个任务已经结束或者已经取消或者不能被取消或者某些其他原因,那么将导致这个操作失败,当调用此方法时,此方法执行成功并且这个任务还没有执行,那么此任务将不再执行。如果任务已经开始,这时执行此操作传入的参数mayInterruptIfRunning为true,执行此任务的线程将尝试中断该任务。

  参数

  mayInterruptIfRunning 如果为true则正在执行的线程将会中断,如果false,则会允许正在执行的任务线程执行完毕。

  返回值

                       如果此任务不能取消返回false,如果已经正常的执行完毕,返回true

  参见

  public final AsyncTask<Params, Progress, Result> execute (Params... params)

  用指定的参数来执行此任务,这个方法将会返回此任务本身,所以调用者可以拥有此任务的引用。此方法必须在UI线程中调用

  params  任务参数

  AsyncTask的实例

  异常

  IllegalStateException       如果getStatus()返回的是RUNNING或者FINISHED

  public final Result get ()

  等待计算结束并返回结果

  计算结果

  CancellationException    如果计算取消

  ExecutionException         如果计算抛出异常

  InterruptedException     当等待时当前线程抛出异常

  public final Result get (long timeout, TimeUnit unit)

  等待计算结束并返回结果,最长等待时间为:timeOut(超时时间).

  timeout 计算等待超时时间

  unit          超时的时间单位

  TimeoutException 等待时间超时

  public final AsyncTask.Status getStatus ()

  获得任务的当前状态

               当前状态

  public final boolean isCancelled ()

  如果在任务正常结束之前取消任务成功则返回true,否则返回false

                            如果任务正常结束之前取消任务成功返回true。

                  参见

  十、受保护方法 

           protected abstract Result doInBackground (Params... params)

  params  此任务的参数

  返回一个由此任务子类定义的结果 Result

                 参见

  protected void onCancelled ()

  protected void onPostExecute (Result result)

  protected void onPreExecute ()

  protected void onProgressUpdate (Progress... values)

             参数

  values     进度表示值

  protected final void publishProgress (Progress... values)

  values     将进度值更新到UI

  十一、补充 

           文章精选

  十二、公告

    内部类、内部接口由于内容较少均不再单独发布。

结束

  随着春节的结束,翻译组工作重新回到正轨,感谢大家的关注与支持!

——————————————————————————————————————————

AsyncTask.Status

public static final enum AsyncTask.Status extends Enum<E extends Enum<E>>

java.lang.Enum<E extends java.lang.Enum<E>>

         android.os.AsyncTask.Status

    标志任务的当前状态,每个状态在任务的生命周期中只会出现一次。

  三、枚举值

  public static final AsyncTask.Status FINISHED

  public static final AsyncTask.Status PENDING

  标志任务还没有执行

  public static final AsyncTask.Status RUNNING

  标志任务正在执行

本文转自over140 51CTO博客,原文链接:http://blog.51cto.com/over140/582388,如需转载请自行联系原作者

继续阅读