转载

Android AsyncTask 简单用法

简介

AsyncTask 是一个轻量级的异步处理类。使用是需继承自该类。可以方便的执行异步任务并且在将进度显示在UI上。

注意事项

  • AsyncTask只适合处理轻量级的任务即耗时几秒或者几十秒的任务。如果需要长时间执行后台异步任务,可以查阅java.util.concurrent 包中的 Executor, ThreadPoolExecutor 以及 FutureTask等内容。

  • 使用AsyncTask必须创建一个类继承自AsyncTask,至少需要重写doInBackground(params...) 方法执行具体的操作。一般会重写onPostExecute(Result)方法用来执行后台操作以及对后台运行结果进行处理。

AsyncTask 执行的4个阶段

  • step1

    onPreExecute() 在主线程(UI线程)调用,用于开始任务前的初始化工作。例如显示一个进度条。

  • step2

    doInBackground(Params...) 后台线程调用,onPreExecute() 执行完之后立即执行。用于执行耗时较长的操作。并且提供publishProgress(Progress...)方法用于显示进度信息。

  • step3

    onProgressUpdate (Progress...)在主线程(UI线程)调用,用于响应publishProgress(Progress...)方法。

  • step4

    onPostExecute(Result) 在主线程调用,doInBackground(Params...)方法执行完后立即调用。Result是doInBackground(Params...)方法的返回值。

AsyncTask使用方法

  • 构造函数 可以自定义public类型的构造函数,和普通的类没有差别。
  • AsyncTask每次使用必须new 一个对象,并且执行excute(Params...)方法。Params参数解释见下文。

参数解释

这三个参数会在类继承时被指定,参数都使用泛型构造。

  • Params 后台线程所需要的参数列表,与构造类时所指定的第一个参数类型匹配。
  • Progress 后台线程执行过程中发送的进度信息, 与构造类时所指定的第二个参数类型匹配。
  • Result 后台线程执行完后的返回值, 与构造类时所指定的第三个参数类型匹配。

代码示例(来自Android Developer)

  • Class definition
    private class DownloadFilesTask extends AsyncTask

    {

    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));

    // Escape early if cancel() is called

    if (isCancelled()) break;

    }

    return totalSize;

    }

    protected void onProgressUpdate(Integer... progress) {

    setProgressPercent(progress[0]);

    }

    protected void onPostExecute(Long result) {

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

    }

    }

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

更多用法 AsyncTask AndroidDeveloper

原文  http://www.cnblogs.com/tyouter/p/5153037.html
正文到此结束
Loading...