开启AsyncTask从网络加载图片

 1 /*AsyncTask  异步任务即做一些简单的异步处理  ;是handle与线程池的封装
 2      * 第一个泛型:参数类型泛型
 3      * 第二个泛型:更新进度泛型
 4      * 第三个泛型:onProgressUpdate的返回结果的泛型
 5      *
 6      */
 7
 8     class BitmapTask extends AsyncTask<Object, Void, Bitmap>{
 9
10         private ImageView pic;
11         private String murl;
12         /**
13          * 后台耗时方法在此执行,子线程
14          */
15         @Override
16         protected Bitmap doInBackground(Object... params) {
17             pic = (ImageView) params[0];
18             murl = (String) params[1];
19
20             pic.setTag(murl);//将图片与url绑定
21             return downloadBitmap(murl);
22         }
23         /**
24          * 更新进度,主线程
25          */
26         @Override
27         protected void onProgressUpdate(Void... values) {
28             // TODO Auto-generated method stub
29             super.onProgressUpdate(values);
30         }
31         /**
32          * 后台耗时方法结束之后,在此执行,主线程
33          */
34         @Override
35         protected void onPostExecute(Bitmap result) {
36             if(result!=null){
37
38                 String tag = (String) pic.getTag();
39                 if(tag.equals(murl)){
40                     pic.setImageBitmap(result);
41                 }
42
43             }
44             mlocalcacheutils.setBitmapTolocal(murl, result);
45             mmemorycacheutils.setBitmapTomemory(murl, result);
46         }
47     }
 1 /**
 2      *
 3      * 下载图片
 4      * @return
 5      */
 6     private Bitmap downloadBitmap(String url){
 7         HttpURLConnection conn=null;
 8         try {
 9             conn=(HttpURLConnection) new URL(url)
10             .openConnection();
11
12             conn.setConnectTimeout(5000);
13             conn.setReadTimeout(5000);
14             conn.setRequestMethod("GET");
15             conn.connect();
16
17             int responseCode = conn.getResponseCode();//响应码
18
19             if(responseCode==200){//表示成功连接
20                 InputStream inputStream = conn.getInputStream();
21
22                 //图片的压缩设置
23                 BitmapFactory.Options option=new Options();
24                 option.inSampleSize=2;//表示将图片压缩原来的二分之一,需要根据图片的大小来计算出压缩值的大小
25                 option.inPreferredConfig=Bitmap.Config.RGB_565;//通过设置图片的格式即像素大小来进行图片的压缩
26
27                 Bitmap bitmap = BitmapFactory.decodeStream(inputStream,null,option);
28                 return bitmap;
29             }
30
31         } catch (IOException e) {
32
33             e.printStackTrace();
34         }
35         finally{
36             conn.disconnect();
37         }
38         return null;
39
40     }

最后使用

1 public void getBitmapFromNet(ImageView iv_photo, String url) {
2         // TODO Auto-generated method stub
3         BitmapTask bitmaptask=new BitmapTask();
4         bitmaptask.execute(iv_photo,url);//开启AsyncTask,参数在doInBackground获取
5     }
时间: 2024-07-30 10:16:54

开启AsyncTask从网络加载图片的相关文章

Android异步加载学习笔记之四:利用缓存优化网络加载图片及ListView加载优化

如果不做任何处理,直接用网络加载图片在网速快的情况下可能没什么不好的感觉,但是如果使用移动流量或是网络不好的时候,问题就来了,要么用户会抱怨流量使用太多,要么抱怨图片加载太慢,如论从哪个角度出发,都不是好的体验!要提高用户体验,我们就要使用缓存.Android中数据缓存的方式有很多,相关介绍的文章也比较多,比如http://blog.csdn.net/dahuaishu2010_/article/details/17093139和http://www.jb51.net/article/38162

网络多线程 ---实现网络加载图片

案例要求:网络加载图片,随机加载到设置好的视图上 实现的效果图如下: 具体代码如下: // //  ViewController.m //  0603---NSOperationQueue #import "ViewController.h" @interface ViewController () @property (nonatomic,strong) NSMutableArray * imageArray; @end @implementation ViewController

三种基本网络加载图片方式

代码片段(6) [全屏查看所有代码] 1. [代码]普通加载网络方式     ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 public class NormalLoadPictrue {   

【iOS】网络加载图片缓存与SDWebImage

加载网络图片可以说是网络应用中必备的.如果单纯的去下载图片,而不去做多线程.缓存等技术去优化,加载图片时的效果与用户体验就会很差. 一.自己实现加载图片的方法 tips: *iOS中所有网络访问都是异步的.(自己开线程去下载) *普通为模型增加UIImage属性的方法做的是内存缓存(下次启动还需要从网络重新加载), 而要做本地缓存的话,还要自己手动存储网络上下载的图片. *为了加快访问, 还需要自己去弄缓存.(内存缓存或者本地缓存) *当图片没有下载完成时,还要设置占位图片. 以下代码用NSOp

android 网络加载图片,对图片资源进行优化,并且实现内存双缓存 + 磁盘缓存

经常会用到 网络文件 比如查看大图片数据 资源优化的问题,当然用开源的项目  Android-Universal-Image-Loader  或者 ignition 都是个很好的选择. 在这里把原来 写过的优化的代码直接拿出来,经过测试千张图片效果还是不错的. 免费培训课:http://www.jinhusns.com/Products/Curriculum/?type=xcj 工程目录 至于 Activity 就是加载了 1个网格布局 01./** 02.*   实现 异步加载 和   2级缓

iOS网络加载图片缓存与SDWebImage

加载网络图片可以说是网络应用中必备的.如果单纯的去下载图片,而不去做多线程.缓存等技术去优化,加载图片时的效果与用户体验就会很差. 一.自己实现加载图片的方法 tips: *iOS中所有网络访问都是异步的.(自己开线程去下载) *普通为模型增加UIImage属性的方法做的是内存缓存(下次启动还需要从网络重新加载), 而要做本地缓存的话,还要自己手动存储网络上下载的图片. *为了加快访问, 还需要自己去弄缓存.(内存缓存或者本地缓存) *当图片没有下载完成时,还要设置占位图片. 以下代码用NSOp

iOS网络加载图片缓存策略之ASIDownloadCache缓存优化

在我们实际工程中,很多情况需要从网络上加载图片,然后将图片在imageview中显示出来,但每次都要从网络上请求,会严重影响用户体验,为了不是每次显示都需要从网上下载数据,希望将图片放到本地缓存,因此我们需要一个好的的缓存策略,今天我将我在项目工程中的实际经验分享给大家,我这里主要介绍一下强大的ASIHTTPRequest的缓存策略,以及使用方法. AD: 在我们实际工程中,很多情况需要从网络上加载图片,然后将图片在imageview中显示出来,但每次都要从网络上请求,会严重影响用户体验,为了不

使用自定义的item、Adapter和AsyncTask、第三方开源框架PullToRefresh联合使用实现自定义的下拉列表(从网络加载图片显示在item中的ImageView)

AsyncTask使用方法详情:http://www.cnblogs.com/zzw1994/p/4959949.html 下拉开源框架PullToRefresh使用方法和下载详情:http://www.cnblogs.com/zzw1994/p/4992194.html 具体实现的代码如下: item.xml: 1 <?xml version="1.0" encoding="utf-8"?> 2 <RelativeLayout xmlns:and

LruCache:从网络加载图片缓存实例

OOM异常 堆内存用于存储实例对象,当程序不断创建对象,并且对象都有引用指向,那么垃圾回收机制就不会清理这些对象,当对象多到挤满堆内存的上限后,就产生OOM异常.Android系统为每个应用程序使用的内存设置了一个上限.这个上限值可以用下面的方法取得: long maxSize = Runtime.getRuntime().maxMemory(); OOM异常通常分为下面几种情况:1.内存泄漏导致的OOM:new出来的很多对象已经不需要了,但仍然有引用指向,所以垃圾回收机制无法回收. 其场景类似