Android异步任务之AsyncTask的使用
来源:互联网 发布:相貌评分软件结果 编辑:程序博客网 时间:2024/04/27 07:14
AsyncTask是Android中用来处理异步任务的类,通过继承AsyncTask类并复写其中的方法,我们可以很容易的实现异步任务,比如网络操作,文件读写操作等
由于Android的UI线程中不能处理耗时太长的任务(一般耗时超过5秒的任务在UI线程中执行,就会导致ANR,即应用程序没有响应),AsyncTask为我们提供了方便的操作异步任务的方法,我们主要实现AsyncTask中的如下几个方法,就能完成异步任务的执行,在合适的时间更新UI
1、onPreExecute()
2、doInBackground()
3、onProgressUpdate()
4、onPostExecute()
其中第二个方法是在后台执行的,其余三个方法都是在UI线程中完成的
下面上代码:
package com.example.testbitmap;import java.io.File;import java.io.FileOutputStream;import java.io.InputStream;import java.net.URL;import java.net.URLConnection;import android.app.Activity;import android.os.AsyncTask;import android.os.Bundle;import android.view.View;import android.widget.ProgressBar;import android.widget.TextView;import android.widget.Toast;public class MainActivity extends Activity {private TextView tv;private ProgressBar pb; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tv = (TextView) findViewById(R.id.textview); tv.setText("未下载"); pb = (ProgressBar) findViewById(R.id.progressbar); } //按钮的点击事件,点击后开始下载文件 public void btnClick(View view){ //下载文件的URL地址 String url = "http://nb.baidupcs.com/file/478ac869d675f83496786f4b817f94a2?fid=659961273-250528-991835723656149&time=1411713894&sign=FDTAXER-DCb740ccc5511e5e8fedcff06b081203-u1bc1uYwyuKSX1ao4fl%2Fi5vokpI%3D&to=nbb&fm=Nin,B,T,t&newver=1&newfm=1&flow_ver=3&expires=8h&rt=sh&r=246606095&mlogid=1566043457&vuk=1812575994&vbdid=3834557252&fn=whty_zhongshang_0923_2.apk"; //开启异步任务 new DownloadTask().execute(url); } /** * 继承自AsyncTask的类,用于异步任务的执行 * @author yubo<br/> * 2014年9月26日 */ class DownloadTask extends AsyncTask<String, Integer, File>{ @Override protected void onPreExecute() {//在UI线程中执行 super.onPreExecute(); //开始下载前 tv.setText("开始下载"); pb.setMax(100); Toast.makeText(MainActivity.this, "start download...", Toast.LENGTH_SHORT).show(); }@Overrideprotected File doInBackground(String... params) {//在后台线程中执行//下载中int contentLen = 0;//文件总大小int hasDownload = 0;try {URL url = new URL(params[0]);URLConnection conn = url.openConnection();//获取文件的总长度contentLen = conn.getContentLength();InputStream is = conn.getInputStream();int hasRead = 0;//新建保存下载的文件File f = new File("mnt/sdcard/test.apk");FileOutputStream fos = new FileOutputStream(f);byte[] buf = new byte[100];while((hasRead = is.read(buf)) > 0){fos.write(buf, 0, hasRead);hasDownload += hasRead;//计算下载进度并发送进度publishProgress((int)((hasDownload * 1.0 / contentLen) * 100));}fos.close();is.close();return f;} catch (Exception e) {e.printStackTrace();}return null;}@Overrideprotected void onProgressUpdate(Integer... values) {//在UI线程中执行super.onProgressUpdate(values);//设置进度条的进度pb.setProgress(values[0]);//设置文本显示下载进度tv.setText(values[0] + "%已下载");}@Overrideprotected void onPostExecute(File result) {//在UI线程中执行super.onPostExecute(result);//下载完成后pb.setProgress(0);pb.setVisibility(View.GONE);tv.setText("下载完成");} }}下面是程序运行截图:
0 0
- Android异步任务之AsyncTask的使用
- Android异步任务之AsyncTask基本使用
- Android 异步任务 AsyncTask 的使用总结
- Android 异步任务AsyncTask的使用
- Android中异步任务AsyncTask的使用
- Android AsyncTask异步任务的使用
- Android 异步任务AsyncTask的使用
- Android之AsyncTask异步任务
- Android异步任务AsyncTask使用
- Android异步更新UI的方式之使用AsyncTask异步任务
- android的异步任务AsyncTask
- 异步任务AsyncTask的使用
- AsyncTask异步任务的使用
- Android之线程使用AsyncTask异步任务(一)
- Android之线程使用AsyncTask异步任务(二)
- Android带进度条的文件上传,使用AsyncTask异步任务
- Android中AsyncTask(异步执行任务)的使用
- Android 异步任务AsyncTask类的简单使用
- window.showModalDialog以及window.open用法简介
- Unity3D游戏开发从零单排(九) - 进击的Shader
- Android提示版本更新的实现
- openssl数字证书常见格式与协议介绍
- 树莓派lighttpd,php,samba安装
- Android异步任务之AsyncTask的使用
- 图像特征提取之(二)LBP特征(理论知识)
- 如何忽略Android资源编译错误 Error: this attribute must be localized.
- iOS 如何放大按钮点击热区
- Android: Baidu Map API 集成流程 小白备忘...sha值得生成报错
- C语言程序学习(十二)笔记
- 理解objc_msgSend的作用
- linux中断流程详解
- Spring MVC和Struts2的比较