本文档主要介绍了如何在Android平台上利用`AsyncTask`类实现异步任务处理,这是Android应用开发中一种常见的非阻塞操作方式,特别是在网络请求、文件下载等耗时操作中。`AsyncTask`提供了一种简洁的方式来在后台线程执行耗时操作,并更新用户界面。 首先,我们来看`DownloadFilesTask`的例子。这个`AsyncTask`子类继承自`AsyncTask<URL, Integer, Long>`,其中`<URL, Integer, Long>`表示输入参数类型(URL数组)、进度更新类型(整数)和最终返回结果类型(长整型)。在`doInBackground`方法中,它接收一个URL数组作为输入,通过遍历数组并调用`Downloader.downloadFile`函数下载文件,同时在每次下载完成后更新进度,并使用`publishProgress`通知UI线程更新进度条。`onProgressUpdate`回调方法处理这些进度更新,设置进度百分比。下载完成后,`onPostExecute`被调用,显示一个对话框显示总下载的字节数。 接着是`DownloadTouchIcon`任务,这是一个子类`AsyncTask<String, Void, Bitmap>`,用于下载网页的图标。它包含了`ContentResolver`、`Cursor`、原始URL、下载URL以及用户代理字符串作为成员变量,目的是获取网页的favicon(网站图标)。构造函数接受一个`BrowserActivity`对象,确保与UI活动有交互。这个任务执行时,会在后台下载图标,并在完成后更新显示。 `AsyncTask`的核心在于它的三个重写方法:`doInBackground`(执行耗时任务),`onProgressUpdate`(更新UI进度),以及`onPostExecute`(完成后的清理工作)。使用这种方式,开发者可以避免主线程阻塞,提供更流畅的用户体验。然而,需要注意的是,`AsyncTask`在Android 3.0及以上版本中不再推荐使用,因为它可能导致内存泄漏。替代方案包括`ExecutorService`、`JobService`或者使用库如Retrofit、OkHttp等进行网络请求,以及在运行时适配新的`HandlerThread`或`LiveData`等更现代的机制来实现异步处理。
49. AsyncTask实例代码演示Android异步任务
上次我们讲到了Android提供了一个较线程更简单的处理多任务的方法AsyncTask异步任务类,相对于线程来说AsyncTask对于简单的任务处理更安全,其内部的实现方法使用了Android的Handler机制,对于常见的文件下载可以使用AsyncTask类来处理,在Browser浏览器中就是用了该类下载Web服务器URL的Favicon图标。 首先Android123以简单的下载例子演示该类的大致结构,如下 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);
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");
}
} 最终我们执行 DownloadFilesTask().execute(url1, url2, url3); 即可。 在Android浏览器中下载Favicon图标的实现如下: class DownloadTouchIcon extends AsyncTask<String, Void, Bitmap> {
private final ContentResolver mContentResolver;
private final Cursor mCursor;
private final String mOriginalUrl;
private final String mUrl;
private final String mUserAgent;
/* package */ BrowserActivity mActivity; public DownloadTouchIcon(BrowserActivity activity, ContentResolver cr,
Cursor c, WebView view) { //构造方法
mActivity = activity;
mContentResolver = cr;
mCursor = c;
下载后可阅读完整内容,剩余2页未读,立即下载
- 粉丝: 0
- 资源: 21
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- C++标准程序库:权威指南
- Java解惑:奇数判断误区与改进方法
- C++编程必读:20种设计模式详解与实战
- LM3S8962微控制器数据手册
- 51单片机C语言实战教程:从入门到精通
- Spring3.0权威指南:JavaEE6实战
- Win32多线程程序设计详解
- Lucene2.9.1开发全攻略:从环境配置到索引创建
- 内存虚拟硬盘技术:提升电脑速度的秘密武器
- Java操作数据库:保存与显示图片到数据库及页面
- ISO14001:2004环境管理体系要求详解
- ShopExV4.8二次开发详解
- 企业形象与产品推广一站式网站建设技术方案揭秘
- Shopex二次开发:触发器与控制器重定向技术详解
- FPGA开发实战指南:创新设计与进阶技巧
- ShopExV4.8二次开发入门:解决升级问题与功能扩展