何时使用Fresco 与 Picasso???
Fresco
Fresco是Facebook开发的一款强大的开源图片处理库,好处不多说,看官方文档,Facebook还是很贴心的,中文版也很清晰;
使用方法(官网代码):
//使用Facebook自定义的ImageView
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/my_image_view"
android:layout_width="20dp"
android:layout_height="20dp"
fresco:placeholderImage="@drawable/my_drawable" />
//图片加载
Uri uri = Uri.parse("https://raw.githubusercontent.com/facebook/fresco/gh-pages/static/fresco-logo.png");
SimpleDraweeView draweeView = (SimpleDraweeView)findViewById(R.id.my_image_view);
draweeView.setImageURI(uri);
当然我们最关心还是缓存技术,在Fresco中实现了三层缓存技术来最大限度地节省空间和CPU时间:两级内存(内存缓存和本地缓存)和一级文件(Bitmap缓存),这里不需要像上面Picasso一样来自己使用OkHttp来做本地缓存了。
关于网络请求方面,Fresco也是支持自定义网络请求的,可以使用OkHttp,官网文档有介绍,不过我认为这里的OkHttp已经不是我们熟悉的Square的OkHttp了,Facebook应该为适配Fresco而做了一些改进。
使用Fresco在提升性能的同时牺牲了不少空间的,可以看看这篇文章:Fresco调研与性能测试。里面结合实际例子展现出来:Fresco占用的Native Heap很大,但是占用Java Heap很小:意思就是说Fresco更多的是使用了OS的资源,而不是使用我们程序所在进程中的资源;
Fresco要说的不多,但是它的使用方法非常多,我们以后想要将这个库应用到实际开发中,还是需要多上手实践一下;官网是最好的教程。
最后看一篇文章,带你看看Fresco有哪些不足之处:Fresco之强大之余的痛楚
Picasso? Fresco?
看了上面的介绍,你是否有疑惑?两个框架同样优秀,到底该选择哪一个使用呢?两者的区别可以在stackoverflow上面找;
下图是我分别使用Picasso和Fresco的例子,如果有兴趣的可以在Github上面把代码Clone下来看看效果:

(我为什么使用Picasso?因为对Square的信仰!!!)
总结一下:当你的App有大量的图片出现、图片的分辨率非常大的时候,请使用Fresco,因为使用其它框架很容易造成OOM;为了性能而牺牲一些空间资源是值得的;而当App中图片较少、图片的质量不是很高的时候可以使用Picasso:Fresco资源占用太多就不值得了,这时Picasso就会有很大的优势;
当然还有其他的图片加载库,如Glide,使用方法和Picasso几乎一样,有兴趣可以了解一下。
以上就是本篇的全部内容,如果有问题,请在评论中指出!
作者:Torang
链接:http://www.jianshu.com/p/9b93737bfa88
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。