简介

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

Android AsyncTask 简单用法的更多相关文章

  1. Android Scroller简单用法

    Android里Scroller类是为了实现View平滑滚动的一个Helper类.通常在自定义的View时使用,在View中定义一个私有成员mScroller = new Scroller(conte ...

  2. Android intent-filter 简单用法

    对电话拨号盘的过滤,mainfest配置文件中Activity如下配置: <activity Android:name=".TestActivity" android:lab ...

  3. Android Scroller简单用法实例

    Android里Scroller类是为了实现View平滑滚动的一个Helper 类.通常在自定义的View时使用,在View中定义一个私有成员mScroller = new Scroller(cont ...

  4. Android Scroller简单用法 --View滚动

    转:http://ipjmc.iteye.com/blog/1615828 Android里Scroller类是为了实现View平滑滚动的一个Helper类.通常在自定义的View时使用,在View中 ...

  5. Android MultiType第三方库的基本使用和案例+DiffUtil的简单用法

    1.MultiType简单介绍 1.1.MultiType用于比较复杂的页面. 如下图,今日头条用到了MultiType处理各种复杂的页面.    这种还是比较简单的类型.因为一个页面也就这种类型. ...

  6. Android—— ListView 的简单用法及定制ListView界面

    一.ListView的简单用法 2. 训练目标 1) 掌握 ListView 控件的使用 2) 掌握 Adapter 桥梁的作用 实现步骤: 1)首先新建一个项目, 并让ADT 自动帮我们创建好活动. ...

  7. Android Spinner的简单用法。

    今天学到的是spinner,就是下拉列表,这可不是ExpandListView哈. 闲话不解释.这是控件,所以先上布局:就不上线性布局了,基本上可以总结出,控件都得在布局里写,写之前嵌个布局就行. & ...

  8. Android -- AsyncTask 使用和缺陷

    一.AsyncTask的基本用法 由于AsyncTask是一个抽象类,所以如果我们想使用它,就必须要创建一个子类去继承它.在继承时我们可以为AsyncTask类指定三个泛型参数,这三个参数的用途如下: ...

  9. android AsyncTask介绍(转)

    android AsyncTask介绍 AsyncTask和Handler对比 1 ) AsyncTask实现的原理,和适用的优缺点 AsyncTask,是android提供的轻量级的异步类,可以直接 ...

随机推荐

  1. Jquery与CSS选择器参考手册

  2. 我收录整理的优秀OC技术类文章

        自定义导航按钮UIBarButtonItem   关于导航栏的六个小技巧   ios开发的一些小技巧篇一 制作一个可以滑动操作的 Table View Cell - IOS - 伯乐在线 一个 ...

  3. 在IIS Express中调试时无法读取配置文件 错误

    在IIS Express中调试代码时,如果出现"无法读取配置文件"的问题(如图),这种情况是IIS Express的"applicationhost.config&quo ...

  4. linux 常用操作指令(随时更新)

    ls: 查看当前目录下文件列表 -l   列出文件详细信息l(list)  -a   列出当前目录下所有文件及目录,包括隐藏的a(all) mkdir         创建目录 -p         ...

  5. 更新UI界面的四种方法

    一.runOnUiThread(new Runnable()): 二.Handler的sendMessage()系列: 三.Handler的post(): 四.View的post():

  6. 关于eclipse中DDMS中Emulator Control选项卡为灰色不可用

    首先先感谢版主:http://blog.csdn.net/noname666/article/details/51670905#reply 方法一的出处:http://stackoverflow.co ...

  7. BeautifulSoup-find,findAll

    BeautifulSoup的主要函数使用 from bs4 import BeautifulSouphtml = """<html><head>& ...

  8. PHP中FOREACH()用法

    PHP 4 引入了 foreach 结构,和 Perl 以及其他语言很像.这只是一种遍历数组简便方法.foreach 仅能用于数组,当试图将其用于其它数据类型或者一个未初始化的变量时会产生错误. 1. ...

  9. Eclipse+Python+Selenium自动化测试框架搭建

    1.下载Eclipse:http://www.eclipse.org/downloads/ 2.下载JDK:http://www.oracle.com/technetwork/java/javaee/ ...

  10. 【转】最佳Restful API 实践

    原文转自:https://bourgeois.me/rest/ REST APIs are a very common topic nowaday; they are part of almost e ...