【AsyncTask整理 2】 AsyncTask方法代码演示

来源:互联网 发布:淘宝上的望远镜 编辑:程序博客网 时间:2024/05/17 08:19
Android SDK为我们提供了一个后台任务的处理工具AsyncTask。AsyncTask就是一个封装过的后台任务类顾名思义就是异步任务,方便我们维护,Android开发网提示这样的好处可以解决一些线程安全问题,AsyncTask直接继承于Object类,位置为 android.os.AsyncTask。

                 三个泛型:

                 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
原创粉丝点击