把图片缓存、手势及OOM三个主题放在一起,是因为在Android应用开发过程中,这三个问题经常是联系在一起的。首先,预览大图需要支持手势缩放,旋转,平移等操作;其次,图片在本地需要进行缓存,避免频繁访问网络;最后,图片(Bitmap)是Android中占用内存的大户,涉及高清大图 ...
把图片缓存、手势及OOM三个主题放在一起,是因为在Android应用开发过程中,这三个问题经常是联系在一起的。首先,预览大图需要支持手势缩放,旋转,平移等操作;其次,图片在本地需要进行缓存,避免频繁访问网络;最后,图片(Bitmap)是Android中占用内存的大户,涉及高清大图等处理时,内存占用非常大,稍不谨慎,系统就会报OOM错误。
庆幸的是,这三个主题在Android开发中属于比较普遍的问题,有很多针对于此的通用的开源解决方案。因此,本文主要说明笔者在开发过程中用到的一些第三方开源库。主要内容如下:
- Universal Image Loader、Picasso、Glide与Fresco的对比及使用
- PhotoView、GestureImageView的原理及使用
- leakcanry内存分析工具
一、Universal Image Loader、Picasso、Glide与Fresco的对比及使用
Universal Image Loader(UIL)、Picasso、Glide与Fresco是Android中进行图片加载的常用第三方库,主要封装了内存缓存、磁盘缓存、网络请求缓存、线程池等方法,抽象了图片加载的流程,很大程度避免了加载图片引起的内存溢出,提高了图片加载的效率。下图是笔者近期从各个库的github页面查询到的信息:
需要说明的是:
- Imageloader是最早开源的图片缓存库,目前作者已停止维护(11.27);
- Picasso的实际作者是Square的Jake Wharton,Android领域的绝对大牛;
- Glide是由Google员工开源的,在Google I/O 2014官方应用中推荐使用;
- Fresco的图片加载不使用Java堆内存,而是匿名共享内存(Ashmem)。
附上各个库的github地址:
Universal Image Loader:https://github.com/nostra13/Android-Universal-Image-Loader.git
Picasso:https://github.com/square/picasso.git
Glide:https://github.com/bumptech/glide.git
Fresco:https://github.com/facebook/fresco.git
这四个图片缓存库的基本使用(HelloWorld)都可以通过一句代码实现,分别如下:
UIL:
ImageLoader.getInstance().displayImage(url, imageView);
原标题:Android开发笔记——图片缓存、手势及OOM分析
关键词:Android
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:
admin#shaoqun.com
(#换成@)。