自动释放内存!Facebook推出强大Android图片库Fresco

发表于 2015-03-30 17:2314728次阅读| 来源 CSDN73 条评论| 作者 刘璐璐
allowtransparency="true" frameborder="0" scrolling="no" src="http://hits.sinajs.cn/A1/weiboshare.html?url=http%3A%2F%2Fwww.csdn.net%2Farticle%2F2015-03-27%2F2824328-Fresco&type=3&count=&appkey=&title=Fresco%E6%98%AFFacebook%E6%9C%80%E6%96%B0%E6%8E%A8%E5%87%BA%E7%9A%84%E4%B8%80%E6%AC%BE%E7%94%A8%E4%BA%8EAndroid%E5%BA%94%E7%94%A8%E4%B8%AD%E5%B1%95%E7%A4%BA%E5%9B%BE%E7%89%87%E7%9A%84%E5%BC%BA%E5%A4%A7%E5%9B%BE%E7%89%87%E5%BA%93%EF%BC%8C%E5%8F%AF%E4%BB%A5%E4%BB%8E%E7%BD%91%E7%BB%9C%E3%80%81%E6%9C%AC%E5%9C%B0%E5%AD%98%E5%82%A8%E5%92%8C%E6%9C%AC%E5%9C%B0%E8%B5%84%E6%BA%90%E4%B8%AD%E5%8A%A0%E8%BD%BD%E5%9B%BE%E7%89%87%E3%80%82%E5%85%B6%E4%B8%AD%E7%9A%84Drawees%E5%8F%AF%E4%BB%A5%E6%98%BE%E7%A4%BA%E5%8D%A0%E4%BD%8D%E7%AC%A6%EF%BC%8C%E7%9B%B4%E5%88%B0%E5%9B%BE%E7%89%87%E5%8A%A0%E8%BD%BD%E5%AE%8C%E6%88%90%E3%80%82%E8%80%8C%E5%BD%93%E5%9B%BE%E7%89%87%E4%BB%8E%E5%B1%8F%E5%B9%95%E4%B8%8A%E6%B6%88%E5%A4%B1%E6%97%B6%EF%BC%8C%E4%BC%9A%E8%87%AA%E5%8A%A8%E9%87%8A%E6%94%BE%E5%86%85%E5%AD%98%E3%80%82&pic=&ralateUid=&language=zh_cn&rnd=1428321600796" width="22" height="16"> 摘要:Fresco是Facebook最新推出的一款用于Android应用中展示图片的强大图片库,可以从网络、本地存储和本地资源中加载图片。其中的Drawees可以显示占位符,直到图片加载完成。而当图片从屏幕上消失时,会自动释放内存。

快速而又高效的显示图片对Android设备来说是件极其重要的事情,但在过去的几年里,在有效存储图像方面我们面临了很多问题。图片太大,而手机又只有很小的内存,特别是Android设备还要将内存分割给各个应用。所以,太多的图片总会耗去大部分的内存,从而导致应用的崩溃。

为了解决这一问题,Facebook最近推出了一款用于Android应用中展示图片的强大图片库Fresco,它能够从网络、本地存储和本地资源中加载图片。而且,为了节省数据和CPU,它拥有三级缓存。此外,Fresco在显示方面是用了Drawees,可以显示占位符,直到图片加载完成。而当图片从屏幕上消失时,会自动释放图片所占的内存。Fresco支持Android 2.3及以上版本,目前已托管至Github上。



主要特性:

  • 内存

解压后的图片和Android的位图都会占据很大的内存,这导致Java 垃圾收集器更频繁的运行,也让应用变得更加缓慢,这一问题在没有对垃圾收集器进行完善的Android 5.0上尤为严重。

在Android 4.x及以下版本,Fresco将图片放置在Android内存的一个特殊位置。这可以确保当图像不在屏幕上显示时,可以自动释放它们所占的内存。让应用运行的更快速,且不易崩溃。

使用Fresco的应用,即使在配置低端的设备上也能正常运行,而且你无需经常性地去担心图片的内存占用情况。

  • Streaming

Web上的渐进式(Progressive)JPEG图片已经存在多年,打开文件过程中,会先显示整个图片的模糊轮廓,随着扫描次数的增加,图片变得越来越清晰。这种格式可以说是网络较慢情况下的救星,通过图片的轮廓知道正在加载的图片大概是什么。

Android自己的图片库不支持streaming,而Fresco可以,只需指定一个URI,你的应用程序就可以随着数据的到来,自动更新它的显示。

  • 动画

动画GIF和WebP应该是应用的难点,每一帧都是一个大型的位图,而每个动画都是一系列的帧。Fresco则负责加载和处理这些帧及管理它们的内存。

  • Drawing

Fresco在显示方面使用了Drawees,Fresco的Drawees能够显示占位符,直到图片已加载,并自动显示到图像到达时:

  • 将图片扩展至自定义的焦点,而不是作为处理的中心。
  • 使用圆角化或圆形来显示图像。
  • 如果网络加载失败的话,用户可以点击占位符重新加载图像。
  • 显示自定义背景、浮窗小部件(overlays)或图像上的进度条。
  • 当用户点击图片,自定义浮窗小部件。

  • 加载

Fresco的图像管道可以让你以多种方法来自定义加载:

  • 为一个图像指定不同的URI,从中选取一个已经缓存的显示。
  • 优先显示低分辨率图像,待数据到达后交换到高的分辨率。
  • 如果图像有EXIF缩略图,首先显示缩略图,直到整个图片被加载出来(只针对本地图片)。
  • 调整或旋转图像。
  • 即使是在老版的Android上也可以解码WebP图像,只不过不是全部支持。

传送门:Fresco官网Github托管地址

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐