开源项目链接

facebook Fresco仓库:git clone https://github.com/facebook/fresco

facebook Fresco主页:“>http://fresco-cn.org/docs/index.html#

Fresco Demo:https://github.com/yanbober/Android-Blog-Source/tree/master/Fresco-Android-CN-Demo

背景介绍

最近微博和论坛火了一个facebook的lib,其实没啥介绍的,以下文字摘自Fresco主页,只能说他牛逼高大上duang duang duang的。

Fresco是一个强大的图片加载组件。Fresco中设计有一个叫做image pipeline的模块。它负责从网络,从本地文件系统,本地资源加载图片。为了最大限度节省空间和CPU时间,它含有3级缓存设计(2级内存,1级文件)。Fresco中设计有一个叫做Drawees模块,方便地显示loading图,当图片不再显示在屏幕上时,及时地释放内存和空间占用。Fresco支持Android2.3(API level 9)及其以上系统。

最牛逼的特点

内存管理

一个没有未压缩的图片,即Android中的Bitmap,占用大量的内存。大的内存占用势必引发更加频繁的GC。在5.0以下,GC将会显著地引发界面卡顿。在5.0以下系统,Fresco将图片放到一个特别的内存区域。当然,在图片不显示的时候,占用的内存会自动被释放。这会使得APP更加流畅,减少因图片内存占用而引发的OOM。Fresco在低端机器上表现一样出色,你再也不用因图片内存占用而思前想后。

图片的渐进式呈现

渐进式的JPEG图片格式已经流行数年了,渐进式图片格式先呈现大致的图片轮廓,然后随着图片下载的继续,呈现逐渐清晰的图片,这对于移动设备,尤其是慢网络有极大的利好,可带来更好的用户体验。

Android本身的图片库不支持此格式,但是Fresco支持。使用时,和往常一样,仅仅需要提供一个图片的URI即可,剩下的事情,Fresco会处理。

Gif图和WebP格式

是的,支持加载Gif图,支持WebP格式。

图像的呈现

Fresco的Drawees设计,带来一些有用的特性:

  • 自定义居中焦点(对人脸等图片显示非常有帮助)。
  • 圆角图,当然圆圈也行。
  • 下载失败之后,点击重现下载。
  • 自定义占位图,自定义overlay, 或者进度条。
  • 指定用户按压时的overlay。

图像的加载

Fresco的image pipeline设计,允许用户在多方面控制图片的加载:

  • 为同一个图片指定不同的远程路径,或者使用已经存在本地缓存中的图片。
  • 先显示一个低解析度的图片,等高清图下载完之后再显示高清图。
  • 加载完成回调通知。
  • 对于本地图,如有EXIF缩略图,在大图加载完成之前,可先显示缩略图。
  • 缩放或者旋转图片。
  • 处理已下载的图片。
  • WebP支持。

实战一把屌爆天的功能

我经过实战发现使用时有几步需要留意:

  1. jcenter和mavenCentral都已经有这个库了。
  2. 在Application里init切记在Android管理文件里声明name,否则容易跳坑。

目前截图只是简单的测试体验了下这个屌爆天的库基本功能,日后还会持续补充:

示例代码: 点我下载

IMAGE PIPELINE指南

96、facebook Fresco框架库源使用基础的更多相关文章

  1. 96、facebook Fresco框架库源使用(转载)

    各个属性详情:http://blog.csdn.net/y1scp/article/details/49245535 开源项目链接 facebook Fresco仓库:git clone https: ...

  2. [源码解析] 深度学习分布式训练框架 horovod (4) --- 网络基础 & Driver

    [源码解析] 深度学习分布式训练框架 horovod (4) --- 网络基础 & Driver 目录 [源码解析] 深度学习分布式训练框架 horovod (4) --- 网络基础 & ...

  3. Android 必须知道2018年流行的框架库及开发语言,看这一篇就够了!

    导语 2017 已经悄悄的走了,2018 也已经匆匆的来了,我们在总结过去的同时,也要展望一下未来,来规划一下今年要学哪些新技术.这几年优秀Android的开源库不断推出,新技术层出不穷,需要我们不断 ...

  4. 【Android 系统开发】Android框架 与 源码结构

    一. Android 框架 Android框架层级 : Android 自下 而 上 分为 4层; -- Linux内核层; -- 各种库 和 Android运行环境层; -- 应用框架层; -- 应 ...

  5. Golang构建HTTP服务(一)--- net/http库源码笔记

    搭建一个简单的Go Web服务器 Go语言标准库 - net/http 在学习Go语言有一个很好的起点,Go语言官方文档很详细,今天我们学习的Go Web服务器的搭建就需要用到Go语言官方提供的标准库 ...

  6. Android框架 与 源码结构

    一. Android 框架 Android框架层级 : Android 自下 而 上 分为 4层; -- Linux内核层; -- 各种库 和 Android运行环境层; -- 应用框架层; -- 应 ...

  7. Fresco框架SimpleDraweeView控件的简单使用

    首先把网络.SD卡的读写权限添加上:<span style="font-family: Arial, Helvetica, sans-serif;">   </s ...

  8. 如何查看JDK以及JAVA框架的源码

    如何查看JDK以及JAVA框架的源码 设置步骤如下: 1.点 “window”-> "Preferences" -> "Java" -> &q ...

  9. 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(2)-easyui构建前端页面框架[附源码]

    原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(2)-easyui构建前端页面框架[附源码] 开始,我们有了一系列的解决方案,我们将动手搭建新系统吧. 用 ...

随机推荐

  1. 关于jquery easyui treegrid的问题

    我是用的django web开发架构: 想实现如下功能: 权限架构 点击checkbox时,能获取该checkbox的值: 代码如下: <tr> <th field="na ...

  2. ABBYY FineReader 12双十一特价来袭

    大家似乎都知道:好的办公软件,只要对自己有用,再贵都值得. 可偏偏有人不以为然,几百块钱也是肉啊.也对,毕竟不是人人都能做到"舍得".但没有舍,哪来的得呢? 作为优秀的光学字符识别 ...

  3. media type与media query

    media type(媒体类型)是css 2中的一个非常有用的属性,通过media type我们可以对不同的设备指定特定的样式,从而实现更丰富的界面.media query(媒体查询)是对media ...

  4. 虚拟化之vmware-vsphere (web) client

    两种客户端 vsphere client 配置>软件>高级设置里的变量 uservars.supressshellwarning=1 vsphere web client 安装完vSphe ...

  5. linux工具类之流量监视

    iptraf        好用 yum install iptrafiptraf  is an ncurses-based IP LAN monitor that generates various ...

  6. Git服务器搭建及SSH无密码登录设置

    在Git服务器中建立一个git帐号,用于多人使用. adduser git输入此命令后,会在/home/下建立一个git文件 /home/git 下建立.ssh目录(注意,是.ssh..有个点!) c ...

  7. JS对日期时间的操作

    代码: //判断是否超期(有效期开始超过一年后算已超期) function IsEffect(effectDate) { var val = ""; var currentDate ...

  8. html之table标签

    简单的html表格,由table元素以及一个或多个tr,th,td元素组成. tr:定义表格行 th:定义表格头 td:定义表格单元 更复杂的 HTML 表格也可能包括 caption.col.col ...

  9. CryptoAPI与openssl数字签名与验证交互

    昨天写过了RSA非对称加密解密的交互方式, 其实数字签名也是RSA非对称加密,只不过用私钥加密的,再加上个hash摘要 CryptoAPI与openssl RSA非对称加密解密(PKCS1 PADDI ...

  10. LintCode "Number of Islands II"

    A typical Union-Find one. I'm using a kinda Union-Find solution here. Some boiler-plate code - yeah ...