zoukankan      html  css  js  c++  java
  • 【AsyncTask整理 2】 AsyncTask方法代码演示

    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 stub
    17             }
    18           @Override
    19           protected void onCancelled() {
    20             Log.i("czb", "onCancelled is running...");
    21             super.onCancelled();
    22           }
    23           @Override
    24           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           @Override
    34           protected void onPreExecute() {
    35             /*
    36             * 执行预处理,它运行于UI线程,可以为后台任务做一些准备工作,比如绘制一个进度条控件
    37             */
    38             Log.i("czb", "onPreExecute is running...");
    39             super.onPreExecute();
    40           }
    41           @Override
    42           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           @Override
    52           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]代表连接的url
    62               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               // 为了在模拟器中清楚地看到进度,让线程休眠100ms
    83               //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     }
  • 相关阅读:
    ab并发负载压力测试
    在vmware里运行qcow2镜像
    nginx root alias
    速成制作rpm包
    oracle分区表按时间自动创建
    Some network Tools
    python中defaultdict用法详解
    CENTOS7 安装telnet
    H3C 交换机配置
    H3C
  • 原文地址:https://www.cnblogs.com/dongdong230/p/4180188.html
Copyright © 2011-2022 走看看