AsyncTask简单入门
来源:互联网 发布:明朝生活知乎 编辑:程序博客网 时间:2024/05/16 08:34
关系:
java.lang.Object
↳ android.os.AsyncTask<Params, Progress, Result>
概述:
AsyncTask是Android提供的轻量级异步类;它在后台线程处理耗时的操作然后可以将处理的结果返回给UI线程处理。由于它不涉及到使用Thread和Handler所以简单易用。
用法:
首先上一段Android Developer的代码:
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");
}
}
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");
}
}
//执行方式
//new DownloadFilesTask().execute(url1, url2, url3);
下面我们看一下具体的用法。
1.构建一个类继承AsyncTask
需要注意的是AsyncTask的三中泛型类型
Params 启动任务执行的输入参数,比如HTTP请求的URL。
Progress 后台任务执行的百分比。
Result 后台执行任务最终返回的结果,比如String。
2.至少实现 doInBackground (Params... params)这个方法
让我们看一下doInBackground这个方法。
protected abstract Result doInBackground (Params... params)
它接收类型为Params的若干参数,然后返回类型为Result的结果。
3.一般还会实现至少一个 onPostExecute (Result result)方法
protected void onPostExecute (Result result)
它在doInBackground之后被执行,参数就是doInBackground返回的结果。
The 4 steps:
1.onPreExecute()
在AsyncTask被execute之前被执行,一般是做一些准备工作
2.doInBackground(Params...)
在onPreExecute()执行完之后执行,后台线程执行耗时操作
3.onProgressUpdate(Progress...)
在UI线程中执行。在 publishProgress(Progress...)被调用之后执行
4.onPostExecute(Result)
在UI线程中执行,在doInBackground()执行之后执行
Tips:
1.AsyncTask需要在UI线程中加载
2.构建AsyncTask的子类需要在UI线程中
3.execute方法需要在UI线程中被调用
4.对于"The 4 steps"中的四个函数不要自己手动去调用
5.每个task对象只能被execute一次,不然会报异常
0 0
- AsyncTask简单入门
- AsyncTask入门
- AsyncTask入门
- AsyncTask入门
- 【AsyncTask】Android AsyncTask使用入门
- AsyncTask使用入门
- AsyncTask的入门
- Android 入门 -- AsyncTask
- AsyncTask 轻入门
- AsyncTask入门(二)
- AsyncTask简单使用
- AsyncTask的简单使用
- AsyncTask简单说明
- AsyncTask的简单用法
- AsyncTask的简单使用
- AsyncTask的简单使用
- AsyncTask简单应用(一)
- asyncTask简单应用
- 深入理解HashMap
- s3c6410 GPIO驱动总结
- 众筹融资 P2P后新的网络金融
- 织梦发表文章时DedeTag Engine Create File False
- OpenCL 学习step by step (8) 灰度图Histogram计算(2)
- AsyncTask简单入门
- OpenCL快速入门教程
- 顺序打印两个文件内容有错
- 异常TypeError: Ext.get(...) is null
- 单链表
- qtcreator在运行程序时error while loading shared libraries的解决办法
- axis调用webservice接口
- 判断某一年是否是闰年
- iOS开发中使用FMDB的网文iOS 使用FMDB进行数据库操作