Volley的图片加载三种方法
2016-12-31 17:04
246 查看
Volley中Request常用请求有三种:StringRequest,JsonRequest,ImageRequest,而用Volley加载网络图片时,其自身就封装有ImageLoader,它不仅对图片进行缓存,还可以过滤掉重复的链接,避免重复发送请求.值得一提的是,为什么volley适合频繁的网络请求,不适合文件上传等大数据请求呢?那是因为每次添加request会做缓存 如果文件太大会照成oom,如果要解决这个问题,看源码其实我们还有一个办法,就是添加request之前把requests设置request.setShouldCache(false),对于用法来说 是很不方便的事情。想来这也是volley方法中没有上传图片方法的原因吧。
下面是Volley的三种加载图片方式:
1.Volley的ImageRequest方式:
2.Volley的ImageLoader方式:
3.NetworkImageView的用法:
先创建一个RequestQueue对象,再创建一个ImageLoader对象,然后进行下边代码:
注意:
手机内存大小的局限性,AOSP的现行标准是,以720P的手机来说,若手机自身带有1G内存,则每个应用可用内存限制在96MB。若有2G内存,则限制为192MB(即占不到总内存的1/10),一旦某个应用总体使用的内存超过了所在手机的限制,将引发OOM(Out of Memory)错误.
小结:
Volley中图片压缩问题:使用ImageRequest和ImageLoader这两种方式来加载网络图片,都可以传入一个最大宽度和高度的参数来对图片进行压缩,而NetworkImageView中则在加载图片的时候它会自动获取NetworkImageView自身的宽高,然后对比网络图片的宽度,再决定是否需要对图片进行像素压缩。
下面是Volley的三种加载图片方式:
1.Volley的ImageRequest方式:
RequestQueue mQueue = Volley.newRequestQueue(context); ImageRequest imageRequest = new ImageRequest( "http://developer.android.com/images/home/aw_dac.png", new Response.Listener<Bitmap>() { @Override public void onResponse(Bitmap response) { imageView.setImageBitmap(response); } }, 0, 0, Config.RGB_565, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { imageView.setImageResource(R.drawable.default_image); } }); mQueue.add(imageRequest);
2.Volley的ImageLoader方式:
ImageLoader imageLoader = new ImageLoader(mQueue, new BitmapCache(图片缓存设置)); ImageListener listener=ImageLoader.getImageListener(imageView,R.drawable.default_image,R.drawable.failed_image); imageLoader.get("http://img.my.csdn.net/uploads/201404/13/1397393290_5765.jpeg",listener, 200, 200); public class BitmapCache implements ImageCache { private LruCache<String, Bitmap> mCache; public BitmapCache() { int maxSize = 10 * 1024 * 1024; //10M或用Runtime.getRuntime().maxRemember()/8; mCache = new LruCache<String, Bitmap>(maxSize) { @Override protected int sizeOf(String key, Bitmap bitmap) { return bitmap.getRowBytes() * bitmap.getHeight(); } }; } @Override public Bitmap getBitmap(String url) { return mCache.get(url); } @Override public void putBitmap(String url, Bitmap bitmap) { mCache.put(url, bitmap); } } ImageListener listener =ImageLoader.getImageListener(imageView,R.drawable.default_image,R.drawable.failed_image);
3.NetworkImageView的用法:
先创建一个RequestQueue对象,再创建一个ImageLoader对象,然后进行下边代码:
<com.android.volley.toolbox.NetworkImageView android:id="@+id/network_image_view" android:layout_width="200dp" android:layout_height="200dp" android:layout_gravity="center_horizontal" /> 然后在代码中设置: networkImageView = (NetworkImageView) findViewById(R.id.network_image_view); networkImageView.setDefaultImageResId(R.drawable.default_image); networkImageView.setErrorImageResId(R.drawable.failed_image); networkImageView.setImageUrl("http://img.my.csdn.net/uploads/201404/13/1397393290_5765.jpeg",imageLoader);
注意:
手机内存大小的局限性,AOSP的现行标准是,以720P的手机来说,若手机自身带有1G内存,则每个应用可用内存限制在96MB。若有2G内存,则限制为192MB(即占不到总内存的1/10),一旦某个应用总体使用的内存超过了所在手机的限制,将引发OOM(Out of Memory)错误.
小结:
Volley中图片压缩问题:使用ImageRequest和ImageLoader这两种方式来加载网络图片,都可以传入一个最大宽度和高度的参数来对图片进行压缩,而NetworkImageView中则在加载图片的时候它会自动获取NetworkImageView自身的宽高,然后对比网络图片的宽度,再决定是否需要对图片进行像素压缩。
相关文章推荐
- 笔记13 | 练习Volley(二)加载网络图片的三种方法
- javascript实现图片延迟加载方法汇总(三种方法)
- 加载图片的三种方法imageNamed、imageWithContentsOfFile、NSData
- Volley加载图片的三种方式
- 加载外部图片的三种方法
- Goole官方网络框架-Volley的使用解析Json以及加载网络图片方法
- 网页和图片延迟加载方法汇总(三种方法)
- volley三种基本请求图片的方式与Lru的基本使用:正常的加载+含有Lru缓存的加载+Volley控件networkImageview的使用
- 网络加载图片的三种方法
- Google官方网络框架-Volley的使用解析Json以及加载网络图片方法
- 加载 Bundle 中图片的三种方法
- Volley使用方法(二):加载网络图片
- picturebox加载图片的三种方法与网站验证码的抓取
- volley三种基本请求图片的方式与Lru的基本使用:正常的加载+含有Lru缓存的加载+Volley控件networkImageview的使用
- 游戏引擎AndEngine总结(九):三种加载图片资源的方法
- javascript实现图片延迟加载方法汇总(三种方法)
- 网络获取加载图片的三种方法
- Android之Volley框架加载网络图片的三种方式
- Google官方网络框架-Volley的使用解析Json以及加载网络图片方法
- 加载spring配置文件的常用三种方法