【AsyncTask整理 2】 AsyncTask方法代码演示
来源:互联网 发布:淘宝上的望远镜 编辑:程序博客网 时间:2024/05/17 08:19
Android SDK为我们提供了一个后台任务的处理工具AsyncTask。AsyncTask就是一个封装过的后台任务类顾名思义就是异步任务,方便我们维护,Android开发网提示这样的好处可以解决一些线程安全问题,AsyncTask直接继承于Object类,位置为 android.os.AsyncTask。
三个泛型:
Param ,任务执行器需要的数据类型
Progress 后台计算中使用的进度单位数据类型
Result 后台计算返回结果的数据类型
Java代码:
三个泛型:
Param ,任务执行器需要的数据类型
Progress 后台计算中使用的进度单位数据类型
Result 后台计算返回结果的数据类型
Java代码:
1 public class main extends Activity { 2 ImageView imageView01; 3 TextView textView; 4 @Override 5 public void onCreate(Bundle savedInstanceState) { 6 super.onCreate(savedInstanceState); 7 setContentView(R.layout.main); 8 textView = (TextView) this.findViewById(R.id.TextView01); 9 imageView01 = (ImageView) this.findViewById(R.id.ImageView01);10 GetImage getImage = new GetImage();11 getImage.execute("http://hi.csdn.net/attachment/201010/27/0_1288149117Yk8W.gif");12 }13 private class GetImage extends AsyncTask {14 public GetImage() {15 super();16 // TODO Auto-generated constructor stub17 }18 @Override19 protected void onCancelled() {20 Log.i("czb", "onCancelled is running...");21 super.onCancelled();22 }23 @Override24 protected void onPostExecute(Object result) {25 /*26 * 此方法在主线程执行,任务执行的结果作为此方法的参数返回27 */28 Log.i("czb", "onPostExecute is running...");29 Log.i("czb", "result == null ? " + (result == null));30 imageView01.setImageBitmap((Bitmap)result);31 super.onPostExecute(result);32 }33 @Override34 protected void onPreExecute() {35 /*36 * 执行预处理,它运行于UI线程,可以为后台任务做一些准备工作,比如绘制一个进度条控件37 */38 Log.i("czb", "onPreExecute is running...");39 super.onPreExecute();40 }41 @Override42 protected void onProgressUpdate(Object... values) {43 /*44 * 此方法在主线程执行,用于显示任务执行的进度。45 */46 Log.i("czb", "onProgressUpdate is running...");47 // 由publishProgress传递的值48 Log.i("czb", "values " + values[0]);49 super.onProgressUpdate(values);50 }51 @Override52 protected Object doInBackground(Object... params) {53 /*54 * 此方法在后台线程执行,完成任务的主要工作,通常需要较长的时间。55 * 在执行过程中可以调用publicProgress(Progress…)来更新任务的进度。56 */57 Log.i("czb", "doInBackground is running...");58 try {59 Bitmap bitmap;60 HttpClient client = new DefaultHttpClient();61 // params[0]代表连接的url62 URI uri = URI.create((String) params[0]);63 HttpGet get = new HttpGet(uri);64 HttpResponse response = client.execute(get);65 HttpEntity entity = response.getEntity();66 long length = entity.getContentLength();67 Log.i("czb", " " + length);68 InputStream in = entity.getContent();69 if (in != null) {70 ByteArrayOutputStream baos = new ByteArrayOutputStream();71 /*byte[] buf = new byte[128];72 int ch = -1;73 int count = 0;74 while ((ch = in.read(buf)) != -1) {75 baos.write(buf, 0, ch);76 count += ch;77 if (length > 0) {78 // 如果知道响应的长度,调用publishProgress()更新进度79 // onProgressUpdate读取进度80 publishProgress((int) ((count / (float) length) * 100));81 }82 // 为了在模拟器中清楚地看到进度,让线程休眠100ms83 //Thread.sleep(100);84 }*/85 bitmap = BitmapFactory.decodeStream(in);86 in.close();87 baos.close();88 return bitmap;89 }90 } catch (Exception e) {91 e.printStackTrace();92 }93 return null;94 }95 }96 }
0 0
- 【AsyncTask整理 2】 AsyncTask方法代码演示
- AsyncTask实例代码演示Android异步任务
- AsyncTask方法
- AsyncTask
- ASyncTask
- AsyncTask
- AsyncTask
- AsyncTask
- AsyncTask
- AsyncTask
- AsyncTask
- AsyncTask
- AsyncTask
- AsyncTask
- AsyncTask
- AsyncTask
- AsyncTask
- AsyncTask
- 【Android 界面效果40】Android4.0-Fragment框架实现方式剖析(一)
- 【开源项目10】安卓图表引擎AChartEngine
- 【Android 界面效果41】Matrix 与 ColorMatrix
- 【Android 界面效果42】如何自定义字体
- 【AsyncTask整理 1】 AsyncTask几点要注意的地方
- 【AsyncTask整理 2】 AsyncTask方法代码演示
- 【Android Studio使用教程1】Android Studio导入项目的几种方法
- 【Android Studio使用教程2】Android Studio创建项目
- 【Android Studio使用教程3】Android Studio的一些设置 体验更好了
- 【Mood-10】每个程序员都应该读的30本书
- 【代码大全0】读书笔记
- 【重构-改善既有代码的设计0】读书笔记
- 【Linux/Ubuntu学习 7】E: 无法获得锁 /var/lib/dpkg/lock – open (11: 资源暂时不可用) E: 无法锁定管理目录
- 【Android Studio使用教程4】Android Studio下载