AsyncTask
来源:互联网 发布:生化危机 电影 知乎 编辑:程序博客网 时间:2024/05/01 14:47
java.lang.Object
↳android.os.AsyncTask<Params, Progress, Result>
概要
AsyncTask可以方便适当地使用UI线程。他允许执行后台操作并且可以直接在UI线程上发布结果,而不需要操作线程或handler。
一个异步任务(asynchronous task)由一个后台运行的计算(computation)来定义,他的结果将在UI线程上发布。
一个异步任务(asynchronous task)由3个泛化类型(Params,Progress,Result)和4个步骤(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);
异步任务使用如下3种类型:
1. Params,传递给任务的参数类型。
2. Progress,后台计算执行过程中,进步单位(progress units)的类型。(就是后台程序已经执行了百分之几了。)
3. Result, 后台执行返回的结果的类型。
AsyncTask并不总是需要使用上面的全部3种类型。标识不使用的类型很简单,只需要使用Void类型即可。
- private class MyTask extends AsyncTask<Void, Void, Void> { ... }
- new DownloadFilesTask().execute(url1, url2, url
- private class MyTask extends AsyncTask<Void, Void, Void> { ...
AsyncTask的4个步骤
一个异步任务需要执行下面4个步骤
1. onPreExecute(), 该步骤在任务被执行之后立即由UI线程调用。
这个步骤通常用来建立任务,在用户接口(UI)上显示进度条。
2. doInBackground(Params...), 该步骤由后台线程在onPreExecute()方法执行结束后立即调用。该步骤通常被用来执行耗时的后台计算。计算的结果必须由该步骤返回,并被传递到最后一个步骤中。该步骤也可以使用publishProgress(Progress...)来发布一个或多个进度单位(units of progress)。这些值将会在onProgressUpdate(Progress...)步骤中被发布到UI线程。
3. onProgressUpdate(Progress...), 该步骤由UI线程在publishProgress(Progress...)方法调用完后被调用。
并未定义该方法执行的时机。该方法在后台进程计算仍在执行的时候,在UI上显示任何形式的进度。一般用于动态地显示一个进度条或者在文本框中显示log。
4. onPostExecute(Result), 由UI进程在后台计算结束后调用。后台计算的结果会被作为参数传递给这一步骤。
线程规则
为了能使该类正常执行,需要遵循下列规则:
- Task的实例必须在UI线程中被调用。
- execute(Params...)必须在UI线程中调用。
- 不要手动调用onPreExecute(), onPostExecute(Result), doInBackground(Params...), onProgressUpdate(Progress...)。
- Task只能被执行一次,如果想第二次执行会抛出异常。
- AsyncTask
- ASyncTask
- AsyncTask
- AsyncTask
- AsyncTask
- AsyncTask
- AsyncTask
- AsyncTask
- AsyncTask
- AsyncTask
- AsyncTask
- AsyncTask
- AsyncTask
- AsyncTask
- AsyncTask
- AsyncTask
- AsyncTask
- AsyncTask
- EMC针对VMware的云计算集成基础架构和VDI解决方案 在线研讨会 网友问答实录
- Tortoise SVN 版本控制常用操作知识
- 统计英文文章单词JAVA代码
- linux内核中Kconfig文档的作用
- SSH 文件上传错误:encountered 1 errors during the transfer解决方法
- AsyncTask
- python圖片轉換成pdf
- 腾讯公司简介及福利待遇介绍
- 常用正则
- 静态单链表
- Linux下安装数据库时设置内核参数
- HandlerThread
- 数据结构与操作系统中的的堆栈对比
- android学习笔记7--------------MVC设计模式