Android图片加载框架ImageLoader
2016-10-10 18:48
323 查看
平时做项目时,会经常用到加载大量图片的问题,而加载图片时会遇到各种各样的问题,比如:图片错位,OOM等。特别是图片的存储,一直困扰着很多人,因为图片所占的内存较大,很容易出现OOM。接下来介绍一个非常强大的图片加载工具Universal-Image-Loader,该项目在GitHub上面:https://github.com/nostra13/Android-Universal-Image-Loader
该框架的特征:
1、支持多线程下载,图片来源可以是网络,文件系统,ContentProvider,项目文件夹assets和drawable中等。
2、支持随意的配置Imageloader,例如:线程池,图片下载器,内存缓存策略,硬盘缓存策略,图片显示选项以及其他的一些配置;
3、支持图片的内存缓存,文件系统缓存和或者SD卡缓存;
4、支持图片下载过程的监听;
5、根据控件(ImageView)对Bitmap进行剪裁,减少Bitmap占用的内存空间;
6、较好的控制图片的加载过程,例如暂停图片的加载,重新考试图片加载,一般使用在ListView和GridView中,滑动过程中暂停,滑动停止后加载;
7、提供在较慢的网络下加载图片
用法:
1、新建一个项目,下载JAR包到libs中;
2、新建一个类AppContext集成Application
3、ImageLoaderConfiguration是图片加载器ImageLoader的配置参数,使用了建造者模式,这里是直接使用了createDefault()方法创建一个默认的ImageLoaderConfiguration,当然我们还可以自己设置ImageLoaderConfiguration,,一般使用createDefault()创建的ImageLoaderConfiguration就能使用,然后调用ImageLoader的init()方法将ImageLoaderConfiguration参数传递进去,ImageLoader使用单例模式。
4、加权限管理:
5、接下来就可以加载图片了,首先Xml文件:
6、图片的加载:有两种方式,LoadImage和displayImage,通常情况下使用diaplayImage,配置比较简单,一句话就可以:
OutOfMemoryError
虽然这个框架有很好的缓存机制,有效的避免了OOM的产生,一般的情况下产生OOM的概率比较小,但是并不能保证OutOfMemoryError永远不发生,这个框架对于OutOfMemoryError做了简单的catch,保证我们的程序遇到OOM而不被crash掉,但是如果我们使用该框架经常发生OOM,我们应该怎么去改善呢?
减少线程池中线程的个数,在ImageLoaderConfiguration中的(.threadPoolSize)中配置,推荐配置1-5
在DisplayImageOptions选项中配置bitmapConfig为Bitmap.Config.RGB_565,因为默认是ARGB_8888, 使用RGB_565会比使用ARGB_8888少消耗2倍的内存
在ImageLoaderConfiguration中配置图片的内存缓存为memoryCache(new WeakMemoryCache()) 或者不使用内存缓存
在DisplayImageOptions选项中设置.imageScaleType(ImageScaleType.IN_SAMPLE_INT)或者imageScaleType(ImageScaleType.EXACTLY)
通过上面这些,相信大家对Universal-Image-Loader框架的使用已经非常的了解了,我们在使用该框架的时候尽量的使用displayImage()方法去加载图片,loadImage()是将图片对象回调到ImageLoadingListener接口的onLoadingComplete()方法中,需要我们手动去设置到ImageView上面,displayImage()方法中,对ImageView对象使用的是Weak references,方便垃圾回收器回收ImageView对象,如果我们要加载固定大小的图片的时候,使用loadImage()方法需要传递一个ImageSize对象,而displayImage()方法会根据ImageView对象的测量值,或者android:layout_width
and android:layout_height设定的值,或者android:maxWidth and/or android:maxHeight设定的值来裁剪图片
参考来源(请尊重原创):http://blog.csdn.net/xiaanming/article/details/26810303
该框架的特征:
1、支持多线程下载,图片来源可以是网络,文件系统,ContentProvider,项目文件夹assets和drawable中等。
2、支持随意的配置Imageloader,例如:线程池,图片下载器,内存缓存策略,硬盘缓存策略,图片显示选项以及其他的一些配置;
3、支持图片的内存缓存,文件系统缓存和或者SD卡缓存;
4、支持图片下载过程的监听;
5、根据控件(ImageView)对Bitmap进行剪裁,减少Bitmap占用的内存空间;
6、较好的控制图片的加载过程,例如暂停图片的加载,重新考试图片加载,一般使用在ListView和GridView中,滑动过程中暂停,滑动停止后加载;
7、提供在较慢的网络下加载图片
用法:
1、新建一个项目,下载JAR包到libs中;
2、新建一个类AppContext集成Application
public class AppContext extends Application { @Override public void onCreate() { super.onCreate(); /** * 创建默认的Imageloader配置参数 */ ImageLoaderConfiguration configuration = new ImageLoaderConfiguration.Builder(this) .writeDebugLogs() .build(); ImageLoader.getInstance().init(configuration); } }
3、ImageLoaderConfiguration是图片加载器ImageLoader的配置参数,使用了建造者模式,这里是直接使用了createDefault()方法创建一个默认的ImageLoaderConfiguration,当然我们还可以自己设置ImageLoaderConfiguration,,一般使用createDefault()创建的ImageLoaderConfiguration就能使用,然后调用ImageLoader的init()方法将ImageLoaderConfiguration参数传递进去,ImageLoader使用单例模式。
4、加权限管理:
<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
5、接下来就可以加载图片了,首先Xml文件:
<ImageView android:id="@+id/image" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:src="@mipmap/ic_launcher"/>
6、图片的加载:有两种方式,LoadImage和displayImage,通常情况下使用diaplayImage,配置比较简单,一句话就可以:
private ImageView mImageView; private String imageUrl = "http://macprovid.vo.llnwd.net/o43/hub/media/1090/6882/01_headline_Muse.jpg"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mImageView = (ImageView) findViewById(R.id.image); } public void btnClick(View view){ ImageSize imageSize = new ImageSize(200,200); /** * 图片显示的配置 */ DisplayImageOptions options = new DisplayImageOptions.Builder() .showImageOnLoading(R.mipmap.ic_launcher) .cacheInMemory(true) .cacheOnDisk(true) .bitmapConfig(Bitmap.Config.RGB_565) .build(); ImageLoader.getInstance().displayImage(imageUrl,mImageView,options); } }
OutOfMemoryError
虽然这个框架有很好的缓存机制,有效的避免了OOM的产生,一般的情况下产生OOM的概率比较小,但是并不能保证OutOfMemoryError永远不发生,这个框架对于OutOfMemoryError做了简单的catch,保证我们的程序遇到OOM而不被crash掉,但是如果我们使用该框架经常发生OOM,我们应该怎么去改善呢?
减少线程池中线程的个数,在ImageLoaderConfiguration中的(.threadPoolSize)中配置,推荐配置1-5
在DisplayImageOptions选项中配置bitmapConfig为Bitmap.Config.RGB_565,因为默认是ARGB_8888, 使用RGB_565会比使用ARGB_8888少消耗2倍的内存
在ImageLoaderConfiguration中配置图片的内存缓存为memoryCache(new WeakMemoryCache()) 或者不使用内存缓存
在DisplayImageOptions选项中设置.imageScaleType(ImageScaleType.IN_SAMPLE_INT)或者imageScaleType(ImageScaleType.EXACTLY)
通过上面这些,相信大家对Universal-Image-Loader框架的使用已经非常的了解了,我们在使用该框架的时候尽量的使用displayImage()方法去加载图片,loadImage()是将图片对象回调到ImageLoadingListener接口的onLoadingComplete()方法中,需要我们手动去设置到ImageView上面,displayImage()方法中,对ImageView对象使用的是Weak references,方便垃圾回收器回收ImageView对象,如果我们要加载固定大小的图片的时候,使用loadImage()方法需要传递一个ImageSize对象,而displayImage()方法会根据ImageView对象的测量值,或者android:layout_width
and android:layout_height设定的值,或者android:maxWidth and/or android:maxHeight设定的值来裁剪图片
参考来源(请尊重原创):http://blog.csdn.net/xiaanming/article/details/26810303
相关文章推荐
- Android图片加载框架:ImageLoader,Volley,Picasso,Glide,Fresco
- android 高级之旅 (三 )picasso、glide、imageloader等几个常用的图片加载框架
- Android图片加载框架:ImageLoader,Volley,Picasso,Glide,Fresco
- Android图片加载框架:ImageLoader,Volley,Picasso,Glide,Fresco
- 关于android图片加载框架univser-imageloader使用的一些小技巧记录
- Android 框架-ImageLoader 图片加载框架
- android-----Volley框架使用ImageLoader加载图片源码分析
- Android 使用ImageLoader框架进行图片加载
- Android_图片加载框架---ImageLoader
- 【Android 基础】图片加载框架之ImageLoader
- Android 三大图片加载框架的对比——ImageLoader,Picasso,Glide
- android图片加载框架ImageLoader涉及的设计模式
- Android UI-开源框架ImageLoader完美使用+listview加载网络图片与下载
- Android 主流网络图片加载缓存库框架Universal-ImageLoader的使用
- 教你写Android ImageLoader框架之图片加载与加载策略
- Android_开源框架_AndroidUniversalImageLoader网络图片加载
- Android-Universal-Image-Loader异步加载图片框架学习研究
- Android菜鸟学习笔记(ImageLoader加载图片)
- Android使用开源框架加载图片