Android SDK为我们提供了一个后台任务的处理工具AsyncTask。AsyncTask就是一个封装过的后台任务类顾名思义就是异步任务,方便我们维护,Android开发网提示这样的好处可以解决一些线程安全问题,AsyncTask直接继承于Object类,位置为 android.os.AsyncTask。

三个泛型:

Param ,任务执行器需要的数据类型
                 Progress 后台计算中使用的进度单位数据类型
                 Result 后台计算返回结果的数据类型

Java代码:

         public class main extends Activity {
  ImageView imageView01;
  TextView textView;
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    textView = (TextView) this.findViewById(R.id.TextView01);
    imageView01 = (ImageView) this.findViewById(R.id.ImageView01);
    GetImage getImage = new GetImage();
    getImage.execute("http://hi.csdn.net/attachment/201010/27/0_1288149117Yk8W.gif");
  }
  private class GetImage extends AsyncTask {
    public GetImage() {
    super();
    // TODO Auto-generated constructor stub
    }
  @Override
  protected void onCancelled() {
    Log.i("czb", "onCancelled is running...");
    super.onCancelled();
  }
  @Override
  protected void onPostExecute(Object result) {
    /*
     * 此方法在主线程执行,任务执行的结果作为此方法的参数返回
    */
    Log.i("czb", "onPostExecute is running...");
    Log.i("czb", "result == null ? " + (result == null));
     imageView01.setImageBitmap((Bitmap)result);
     super.onPostExecute(result);
   }
   @Override
   protected void onPreExecute() {
     /*
     * 执行预处理,它运行于UI线程,可以为后台任务做一些准备工作,比如绘制一个进度条控件
     */
      Log.i("czb", "onPreExecute is running...");
     super.onPreExecute();
   }
   @Override
   protected void onProgressUpdate(Object... values) {
     /*
      * 此方法在主线程执行,用于显示任务执行的进度。
     */
     Log.i("czb", "onProgressUpdate is running...");
     // 由publishProgress传递的值
     Log.i("czb", "values " + values[0]);
     super.onProgressUpdate(values);
   }
   @Override
   protected Object doInBackground(Object... params) {
     /*
     * 此方法在后台线程执行,完成任务的主要工作,通常需要较长的时间。
     * 在执行过程中可以调用publicProgress(Progress…)来更新任务的进度。
     */
     Log.i("czb", "doInBackground is running...");
     try {
       Bitmap bitmap;
       HttpClient client = new DefaultHttpClient();
       // params[0]代表连接的url
       URI uri = URI.create((String) params[0]);
       HttpGet get = new HttpGet(uri);
       HttpResponse response = client.execute(get);
       HttpEntity entity = response.getEntity();
       long length = entity.getContentLength();
       Log.i("czb", " " + length);
       InputStream in = entity.getContent();
       if (in != null) {
       ByteArrayOutputStream baos = new ByteArrayOutputStream();
       /*byte[] buf = new byte[128];
       int ch = -1;
       int count = 0;
       while ((ch = in.read(buf)) != -1) {
       baos.write(buf, 0, ch);
       count += ch;
       if (length > 0) {
       // 如果知道响应的长度,调用publishProgress()更新进度
       // onProgressUpdate读取进度
       publishProgress((int) ((count / (float) length) * 100));
       }
        // 为了在模拟器中清楚地看到进度,让线程休眠100ms
       //Thread.sleep(100);
       }*/
   bitmap = BitmapFactory.decodeStream(in);
    in.close();
    baos.close();
   return bitmap;
  }
 } catch (Exception e) {
    e.printStackTrace();
}
 return null;
}
}
}

【AsyncTask整理 2】 AsyncTask方法代码演示的更多相关文章

  1. AsyncTask内的各个方法调用顺序

    |- AsyncTask内的各个方法调用顺序:|- 首先,用户调用execute方法,启动AsyncTask .然后在execute方法中:|- 首先调用onPreExecute方法,执行初始化操作. ...

  2. Java用代码演示String类中的以下方法的用法

    用代码演示String类中的以下方法的用法 (1)boolean isEmpty(): 判断字符串是不是空串,如果是空的就返回true (2)char charAt(int index): 返回索引上 ...

  3. 代码演示C#各版本新功能

    代码演示C#各版本新功能 C#各版本新功能其实都能在官网搜到,但很少有人整理在一起,并通过非常简短的代码将每个新特性演示出来. 代码演示C#各版本新功能 C# 2.0版 - 2005 泛型 分部类型 ...

  4. java 覆盖hashCode()深入探讨 代码演示样例

    java 翻盖hashCode()深入探讨 代码演示样例 package org.rui.collection2.hashcode; /** * 覆盖hashcode * 设计HashCode时最重要 ...

  5. 单元测试_JUnit常用单元测试注解介绍及代码演示

    JUnit常用单元测试注解介绍及代码演示   by:授客 QQ:1033553122 1. 测试环境 1 2. 基础概念 1 3. 常用Annotation 1 4. 运行环境配置 3 maven配置 ...

  6. Python Web框架Tornado的异步处理代码演示样例

    1. What is Tornado Tornado是一个轻量级但高性能的Python web框架,与还有一个流行的Python web框架Django相比.tornado不提供操作数据库的ORM接口 ...

  7. ThreadLocal内存溢出代码演示和原因分析!

    ThreadLocal 翻译成中文是线程本地变量的意思,也就是说它是线程中的私有变量,每个线程只能操作自己的私有变量,所以不会造成线程不安全的问题. ​ 线程不安全是指,多个线程在同一时刻对同一个全局 ...

  8. JUC 并发编程--10, 阻塞队列之--LinkedBlockingDeque 工作窃取, 代码演示

    直接上代码 class LinkedBlockingDequeDemo { // 循环是否结束的开关 private static volatile boolean flag1 = true; pri ...

  9. Java编译器如何生成重载和覆盖方法代码

    下面是一个很简单的例子,关于Java中的多态:方法重载和方法覆盖: 多态指的是方法在不同的时刻表现出不同的形式:在编译期间,这被叫做方法重载:方法重载允许相关的方法被同一个方法名字调用,这有时候被叫做 ...

随机推荐

  1. 深入理解CRITICAL_SECTION

    临界区是一种防止多个线程同时执行一个特定代码节的机制,这一主题并没有引起太多关注,因而人们未能对其深刻理解.在需要跟踪代码中的多线程处理的性能时,对 Windows 中临界区的深刻理解非常有用.本文深 ...

  2. C3P0连接池使用小结

    C3P0在最近的demo中也用了(我用的是0.9.2.1版本),因为单例很难应付大量并发. 用法详见文档:http://www.mchange.com/projects/c3p0/ 基本的用法在htt ...

  3. easyui datagrid 的分页刷新按钮

    datagrid  刷新bug: 情形: 当用户A,B  同时操作 datagrid时(记录1,记录2.记录3).如果A如果删除记录1,  B此时已选中了记录1 ,记录2 , 这时B点击分页中的刷新按 ...

  4. OC:关于Itunes你了解多少?

    在苹果电脑里有一个 iTunes 简单的说iTunes是苹果公司开发的一个应用程序,由苹果电脑在2001年1月10日于旧金山的 Macworld Expo 推出的一款数字媒体播放应用程序,用于播放以及 ...

  5. js正则表达式之解析——URL的正则表达式

    首先,此片文章并不是直接告诉你,url的正则表达式是什么,以及怎么使用这个正则表达式去解析一个URL地址,相信这种问题在网络上已经能找到很多.本文的宗旨在于教你如何理解URL的正则表达式,以达到理解正 ...

  6. MVVM知识库总结

    1.关于MVVM概念的理解和实际运用中的解析: http://www.cnblogs.com/hielvis/archive/2011/03/22/1991959.html http://msdn.m ...

  7. Android Studio 0.4 + PhoneGap 3.3 开发环境的搭建

    最近在尝试HTML5移动平台下的开发 由于安卓的方便性,首先开始了安卓的试验 现在安卓下的开发工具首选 Android Studio (写这文章的时候,是0.4) 而跨平台的HTML5 App比较出名 ...

  8. linux的webserver配置与管理——创建用户个人主页

    本实验用的是RedHat linux9.0,在虚拟机上进行操作,它已具有相当完好的可视化界面,这样用户会更加easy接受和理解. 首先呢就是虚拟机的相关配置,这个就不说了,当我们安装完系统后,打开终端 ...

  9. 【转】linux下awk内置函数的使用(split/substr/length)

    转自:http://gdcsy.blog.163.com/blog/static/12734360920130241521280/ 一.split 初始化和类型强制        awk的内建函数sp ...

  10. jquery 新建的元素事件绑定问题

    js的事件监听跟css不一样,css只要设定好了样式,不论是原来就有的还是新添加的,都有一样的表现.而事件监听不是,你必须给每一个元素单独绑定事件. 常见的例子是处理表格的时候.每行行末有个删除按钮, ...