下面以下载图片并显示为例:

首先我们需要知道的是AsyncTask是对线程池+Handler的进一步封装。

下面看一个简单的代码:

 public class MainActivity extends Activity {
     private ImageView ivIcon;
     private static String myUrl = "http://192.168.1.2:8080/tomcat.gif";//图片的ip地址
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
         ivIcon = (ImageView)findViewById(R.id.iv_icon);

         new MyTask().execute(myUrl);// 启动AsyncTask
     }

     // AsyncTask 异步封装的工具, 可以实现异步请求及主界面更新(对线程池+handler的封装)
     class MyTask extends AsyncTask<String,Integer,Bitmap>{

         // 1.预加载, 运行在主线程
         @Override
         protected void onPreExecute() {
             super.onPreExecute();
         }

         // 2.正在加载, 运行在子线程(核心方法), 可以直接异步请求
         @Override
         protected Bitmap doInBackground(String... params) {
             return  downLoad(params[0]);
         }

         // 3.更新进度的方法, 运行在主线程
         @Override
         protected void onProgressUpdate(Integer... values) {
             super.onProgressUpdate(values);
         }

         // 4.加载结束, 运行在主线程(核心方法), 可以直接更新UI
         @Override
         protected void onPostExecute(Bitmap bitmap) {
             ivIcon.setImageBitmap(bitmap);
         }
     }

     /**
      * 从服务器下载图片
      * @param url  服务器的IP
      * @return 请求成功返回Bitmap对象,不成功返回null
      */
     private Bitmap downLoad(String url){
         try {
             HttpURLConnection conn = (HttpURLConnection) new URL(url).openConnection();
             conn.setRequestMethod("GET");
             conn.setConnectTimeout(5000);
             conn.setReadTimeout(5000);
             conn.connect();

             int code = conn.getResponseCode();

             if (code==200){
                 InputStream inputStream = conn.getInputStream();
                 Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
                 return bitmap;
             }
         } catch (IOException e) {
             e.printStackTrace();
         }

         return null;
     }
 }

需要注意的是AsyncTask里面的doInBackground()方法是运行在子线程的,剩下的三个方法是运行在主线程的。所以我们在doInBackground()方法中做耗时操作。

AsyncTask的初步了解的更多相关文章

  1. 异步任务——AsyncTask的初步认识

    ProgressBar_test.class package com.example.administrator.ten_9; import android.app.Activity; import ...

  2. AsyncTask中各个函数详细的调用过程,初步实现异步任务

     AsyncTask内部类可能会产生内存泄露的问题 解决上述内部类可能引起的内存泄露问题的方法 将AsyncTask或者Thread的子类作为单独的类文件,不持有Activity的强引用 将Async ...

  3. Dagger2 使用初步

    Dagger2 是一个Android依赖注入框架,由谷歌开发,最早的版本Dagger1 由Square公司开发.依赖注入框架主要用于模块间解耦,提高代码的健壮性和可维护性.Dagger 这个库的取名不 ...

  4. AsyncTask 轻量级的异步类

    初步:http://www.cnblogs.com/devinzhang/archive/2012/02/13/2350070.html 详细:http://blog.csdn.net/liuhe68 ...

  5. android高级---->AsyncTask的源码分析

    在Android中实现异步任务机制有两种方式,Handler和AsyncTask,它在子线程更新UI的例子可以参见我的博客(android基础---->子线程更新UI).今天我们通过一个小的案例 ...

  6. 移动端之Android开发的几种方式的初步体验

    目前越来越多的移动端混合开发方式,下面列举的大多数我都略微的尝试过,就初步的认识写个简单的心得: 开发方式 开发环境 是否需要AndroidSDK 支持跨平台 开发语言&技能 MUI Win+ ...

  7. Android 旋转屏幕--处理Activity与AsyncTask的最佳解决方案

    一.概述 运行时变更就是设备在运行时发生变化(例如屏幕旋转.键盘可用性及语言).发生这些变化,Android会重启Activity,这时就需要保存activity的状态及与activity相关的任务, ...

  8. CSharpGL(29)初步封装Texture和Framebuffer

    +BIT祝威+悄悄在此留下版了个权的信息说: CSharpGL(29)初步封装Texture和Framebuffer +BIT祝威+悄悄在此留下版了个权的信息说: Texture和Framebuffe ...

  9. Android笔记——AsyncTask介绍

    AsyncTask和Handler对比 1 ) AsyncTask实现的原理,和适用的优缺点 AsyncTask,是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操 ...

随机推荐

  1. NetSuite Chinese Finance Reports

    NetSuite has a strong report customization application. The standard finance reports has a different ...

  2. 【转】十个JavaScript中易犯的小错误,你中了几枪?

    目录 常见错误一:对于this关键词的不正确引用 常见错误二:传统编程语言的生命周期误区 常见错误三:内存泄露 常见错误四:比较运算符 常见错误五:低效的DOM操作 常见错误6:在for循环中的不正确 ...

  3. svn报错:“Previous operation has not finished; run 'cleanup' if it was interrupted“ 的解决方法

    今天改完代码提交时,提交接近完成但窗口还未关闭电脑蓝屏了.夏天来了,电脑比人还怕热啊~~~   心里咯噔一下,估计svn又会出一些莫名其妙的问题了. 果然,待电脑重启后开eclipse,文件还是新增状 ...

  4. ORACLE告警日志文件

    告警日志介绍 告警日志文件是一类特殊的跟踪文件(trace file).告警日志文件命名一般为alert_<SID>.log,其中SID为ORACLE数据库实例名称.数据库告警日志是按时间 ...

  5. 基于php基础语言编写的小程序之计算器

    基于php基础语言编写的小程序之计算器 需求:在输入框中输入数字进行加.减.乘.除运算(html+php) 思路: 1首先要创建输入数字和运算符的输入框,数字用input的text属性,运算符用sel ...

  6. SpringMVC 处理异常的4种方式

    springmvc处理异常有三种方式: 1.在一个controller中定义一个方法,用@ExceptionHandler注解标注.(优先级最高) @ExceptionHandler public M ...

  7. OAF messageChoice 关联问题

    最近有个需求,就是采购订单的供应商要按照一级和二级来选,一级关联二级,二级关联供应商.之前的一级和二级都是用LovInput做的,现在想要改为messageChoice.如下图: 改为: 下面给大家介 ...

  8. ::before和::after伪元素的用法

    一.介绍 css3为了区分伪类和伪元素,伪元素采用双冒号写法. 常见伪类——:hover,:link,:active,:target,:not(),:focus. 常见伪元素——::first-let ...

  9. [转载]python:open/文件操作

    open/文件操作f=open('/tmp/hello','w') #open(路径+文件名,读写模式) #读写模式:r只读,r+读写,w新建(会覆盖原有文件),a追加,b二进制文件.常用模式 如:' ...

  10. 俄罗斯方块(Java实现)

    程序效果: 代码: //Box.java 1 package tetris; public class Box { private final int M = 30, N = 12; private ...