简介
以下是官网对fresco的定义:
fresco是一款功能强大的图片加载工具,使用它之后,你不必再去关心图片的加载和显示这些繁琐的事情!支持Android2.1及以后的版本。
中文官网地址如下:https://www.fresco-cn.org/,代码下载地址:git clone https://github.com/facebook/fresco.git
特性
内存管理
在5.0以下系统,Fresco将图片放到一个特别的内存区域。当然,在图片不显示的时候,占用的内存会自动被释放。这会使得APP更加流畅,减少因图片内存占用而引发的OOM。
图片加载
支持WebP解码,即使在早先对WebP支持不完善的Android系统上也能正常使用!
图片的渐进式呈现
Android 本身的图片库不支持此格式,但是Fresco支持。使用时,和往常一样,仅仅需要提供一个图片的URI即可,剩下的事情,Fresco会处理。
动图加载
加载Gif图和WebP动图在任何一个Android开发者眼里看来都是一件非常头疼的事情。每一帧都是一张很大的Bitmap,每一个动画都有很多帧。Fresco让你没有这些烦恼,它处理好每一帧并管理好你的内存。
以上是copy官网的内容。好,废话不多讲,下面开始源码解析。这篇博客主要讲Fresco的初始化,在后面的博客中随着本人的研究,会慢慢深入。
Fresco的初始化
官网的示例代码如下
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
Fresco.initialize(this);
}
}
所以就从Fresco.initialize(this)开始看,Fresco的java文件路径如下:
fresco\drawee-backends\drawee-pipeline\src\main\java\com\facebook\drawee\backends\pipeline\Fresco.java
initialize方法的代码如下:
public static void initialize(Context context) {
initialize(context, null, null);
}
可以看到最终是调用了
public static void initialize(Context context,@Nullable ImagePipelineConfigimagePipelineConfig,
@Nullable DraweeConfig draweeConfig)
public static void initialize(
Context context,
@Nullable ImagePipelineConfig imagePipelineConfig,
@Nullable DraweeConfig draweeConfig) {
if (sIsInitialized) {
FLog.w(
TAG,
"Fresco has already been initialized! `Fresco.initialize(...)` should only be called " +
"1 single time to avoid memory leaks!");
} else {
sIsInitialized = true;
}
// we should always use the application context to avoid memory leaks
context =