Android中AsyncTask异步任务使用详细实例(一)
AsyncTask是Android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步执行的程度(可以通过接口实现UI进度更新),最后反馈执行的结果给UI主线程,通过本文给大家介绍Android中AsyncTask异步任务使用详细实例(一),需要的朋友参考下 n: if (downLoaderAsyncTask == null || downLoaderAsyncTask.getStatus() == AsyncTask.Status.FINISHED) { downLoaderAsyncTask = new DownLoaderAsyncTask(); downLoaderAsyncTask.execute("http://example.com/file.txt"); } break; case R.id.cancelButton: if (downLoaderAsyncTask != null && downLoaderAsyncTask.getStatus() != AsyncTask.Status.FINISHED) { downLoaderAsyncTask.cancel(true); } break; }}private class DownLoaderAsyncTask extends AsyncTask<String, Integer, String> {private Exception exception;@Overrideprotected String doInBackground(String... urls) {try { HttpClient httpClient = new DefaultHttpClient(); HttpGet httpGet = new HttpGet(urls[0]); HttpResponse httpResponse = httpClient.execute(httpGet); int status = httpResponse.getStatusLine().getStatusCode(); if (status == HttpStatus.SC_OK) { HttpEntity entity = httpResponse.getEntity(); InputStream is = entity.getContent(); ByteArrayOutputStream bos = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int len = 0; while ((len = is.read(buffer)) != -1) { bos.write(buffer, 0, len); publishProgress(len); } return bos.toString(); } else { throw new RuntimeException("Failed to fetch data with status " + status); } } catch (Exception e) { this.exception = e; return null; }}@Overrideprotected void onPreExecute() {progressBar.setIndeterminate(false); progressBar.setMax(100); textView.setText("Downloading..."); }@Overrideprotected void onProgressUpdate(Integer... values) {int progress = values[0]; progressBar.setProgress(progress / 1024 * 100); // Assuming 1KB is one unit for progress} @Overrideprotected void onPostExecute(String result) {if (isCancelled()) { textView.setText("Download cancelled"); } else if (exception != null) { textView.setText("Error: " + exception.getMessage()); } else { textView.setText("Download completed: " + result); }}@Overrideprotected void onCancelled() {textView.setText("Download cancelled");}}} 在Android开发中,AsyncTask是一种常用的轻量级异步处理工具,尤其适用于那些需要在后台执行但需要更新UI的任务。AsyncTask允许开发者在后台线程执行耗时操作,如网络请求或数据库操作,同时能够安全地在UI线程中更新用户界面。 AsyncTask包含三个泛型参数:Params是后台任务的输入参数类型,Progress是表示后台任务进度的类型,Result是后台任务完成后返回的结果类型。在实际应用中,这些参数可以根据具体需求进行定制。 AsyncTask提供了几个关键的方法: 1. `doInBackground(Params...)`:这个方法在后台线程中运行,用于执行耗时操作。在这个方法中,我们不应直接操作UI,因为这可能导致`Android Application Not Responding (ANR)`错误。可以通过调用`publishProgress(Progress...)`方法将进度更新发送到主线程。 2. `onPreExecute()`:在`doInBackground()`开始之前在主线程中运行,通常用于初始化工作,如设置进度条或显示加载提示。 3. `onProgressUpdate(Progress...)`:在主线程中运行,接收来自`doInBackground()`的进度更新,并更新UI。在这个例子中,我们根据已读取的字节数更新进度条。 4. `onPostExecute(Result)`:在后台任务完成后,在主线程中运行,可以用来处理任务结果并更新UI。这个方法中的`Result`参数是`doInBackground()`的返回值。 5. `onCancelled()`:当`cancel()`方法被调用且任务尚未完成时,在主线程中运行,用于清理资源或显示取消消息。 在上述示例中,`DownLoaderAsyncTask`是一个自定义的AsyncTask子类,它下载一个URL(如"http://example.com/file.txt")并在后台执行。`doInBackground()`方法负责HTTP请求,`onProgressUpdate()`方法更新进度条,`onPostExecute()`方法处理下载结果。 在MainActivity中,我们创建了`DownLoaderAsyncTask`实例,并在按钮点击事件中启动或取消任务。点击“开始”按钮会启动任务,而点击“取消”按钮则会尝试取消正在执行的任务。当任务完成或被取消时,相应的文本视图会显示相应消息。 AsyncTask为Android开发者提供了一种方便的方式来处理异步操作,同时确保UI的流畅性。然而,需要注意的是,由于内存管理的原因,AsyncTask不适用于长时间运行的任务。在Android 3.0及更高版本中,如果Activity被销毁,系统会自动取消与之关联的AsyncTask,以防止内存泄漏。因此,对于长时间运行的任务,更适合使用IntentService或者其他的异步处理机制。
































- 粉丝: 6
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 记录个人在计算机视觉-AU335-1课程所完成的lab和大作业
- 计算机视觉学习过程中的实战项目代码仓库
- 基于搜索的软件工程:SSBSE 2021会议精选
- 个人在计算机视觉 - AU335-1 课程中完成的 lab 与大作业记录 个人完成计算机视觉 - AU335-1 课程 lab 及大作业情况记录 计算机视觉 - AU335-1 课程个人所完成 lab
- 19幅图解RAID,从入门到精通,一文读懂存储技术RAID技术详解与选择指南:涵盖RAID级别、硬件与软件RAID、缓存技术及新形态RAID卡的应用场景
- CSDN 学院计算机视觉课程的代码实现示例
- 基于搜索的软件工程前沿进展
- 此仓库存储我在学习计算机视觉时做的实战项目代码
- 此仓库存储我在学习计算机视觉时做的实战项目代码
- 基于深度学习与计算机视觉的 YOLO 大作业设计与实现
- MobaXterm 专业版本工具
- PHP, MySQL和Apache全一册:Web开发入门与实践
- 2021年新版市级、县级国土空间规划用地用海制图规范符号库,直接使用,很方便
- 计算机视觉课程代码实现 - CSDN学院
- opencv-python-headless-4.11.0.86-cp37-abi3-win-amd64.whl
- 【航空航天材料工程】MMPDS-08金属材料性能标准化手册:室温和高温机械性能数据分析与应用



评论0