标签:
目前使用非常广泛的框架技术主要有Android Universal Image Loader,Picasso, Glide和Fresco,最开始出现的应该算是UIL(Universal Image Loader),记得刚开始用图片加载框架的时候,主要就是使用UIL,UIL功能丰富。Picasso是Square搞出来的,Glide与Picasso比较类似,Google推荐Glide,Fresco是Facebook推出的一个图片加载库,这个库非常值得一看,里面有很多很有特色的地方,非常强大的一个开源库。除此之外Volley也是一个很好的图片加载框架,非常轻量。
这些框架基本都可以分成这么几个部分:执行引擎(Engine,或者说调度中心),请求生成部分,缓存部分,图片处理部分,图片显示部分。这基本涵盖了图片从网络或本地获取过来,显示给用户的整个流程。
关于他们之间的比较,可以参考Trinea的文章Android 三大图片缓存原理、特性对比,下面简单介绍一下他们的优缺点:
网络上面关于这些图片开源框架的源码分析还是挺多的,不过这些源码分析一般都仅供参考辅助,如果自己需要了解这些源码的内容,最好自己亲自去看看源码。
Android-Universal-Image-Loader: Android Universal Image Loader 源码分析
Picasso: http://blog.happyhls.me/category/android/picasso/
http://skykai521.github.io/2016/02/25/Picasso%E6%BA%90%E4%BB%A3%E7%A0%81%E5%88%86%E6%9E%90/
Glide: Android Glide源码解析
Fresco: Fresco-Source-Analysis
目前Glide和Fresco都支持gif。对于gif,Fresco的处理跟我们对gif的理解是一致的,先将gif的所有帧解码出来,然后使用动画一帧一帧地放。具体是通过变化Drawable的绘制,每次绘制的时候,绘制对应的一帧:
private boolean renderFrame(
Canvas canvas,
int frameNumber,
int frameMonotonicNumber) {
CloseableReference<Bitmap> bitmapReference =
mAnimatedDrawableBackend.getBitmapForFrame(frameNumber);
if (bitmapReference != null) {
canvas.drawBitmap(bitmapReference.get(), 0f, 0f, mPaint);
if (mLastDrawnFrame != null) {
mLastDrawnFrame.close();
}
if (mIsRunning && frameMonotonicNumber > mLastDrawnFrameMonotonicNumber) {
int droppedFrames = frameMonotonicNumber - mLastDrawnFrameMonotonicNumber - 1;
mAnimatedDrawableDiagnostics.incrementDrawnFrames(1);
mAnimatedDrawableDiagnostics.incrementDroppedFrames(droppedFrames);
if (droppedFrames > 0) {
FLog.v(TAG, "(%s) Dropped %d frames", mLogId, droppedFrames);
}
}
mLastDrawnFrame = bitmapReference;
mLastDrawnFrameNumber = frameNumber;
mLastDrawnFrameMonotonicNumber = frameMonotonicNumber;
FLog.v(TAG, "(%s) Drew frame %d", mLogId, frameNumber);
return true;
}
return false;
}
WebP是google推出的一种新的影像形式,他可以对图片进行有效地压缩又不影响图片的兼容性和实际清晰度,提高图片下载速度,在相同质量它压缩后的体积大概是jpg的40%。但是编码时间大概比jpg的长8倍。目前Facebook跟QQ空间都有使用WebP图片。
这个是Fresco提供的功能,目前只支持jpg网络图片。可以在下图片的时候,让图片逐渐地由模糊变清晰渐渐地显示出来。jpeg格式的图片有两种方式,一种是直接编码的,另外一种是渐进式编码的,能够用于Fresco渐进加载的是要通过渐进式编码的jpeg图片。压缩标准。
Android Bitmap深入介绍(三)--- 开源加载框架简述
标签:
原文地址:http://blog.csdn.net/xxxzhi/article/details/51714079