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

快速而又高效的显示图片对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图像,只不过不是全部支持。
github: https://github.com/facebook/fresco

api: http://fresco-cn.org/

更多相关文章

  1. android中一些view处理(拖动,定位,显示,图层)
  2. Android(安卓)屏幕元素层次结构
  3. Android从网上获取图片的简单示例
  4. Android开机自启动
  5. android背景选择器selector用法汇总
  6. Android常用基本界面元素汇总
  7. Android图片的固定大小显示
  8. android背景选择器selector用法汇总
  9. android常用布局

随机推荐

  1. React.js中的setState vs replaceState
  2. 选择无线电输入时,无法提交带有JavaScript
  3. 【JavaScript】中两个小括号 ()() 是什么
  4. jQuery的几大难点
  5. 利用javascript实现遍历xml文件的代码实
  6. 一个html+css+js的轮播图片 -- 仅供参考
  7. 输入自动完成或Rails中的新功能
  8. Jquery中动态添加元素的绑定事件不起作用
  9. jqGrid 数据加载完事件 loadComplete 使
  10. 对象的属性也要加引号吗