Glide是面向Android的快速高效的开源媒体管理和图像加载框架,将媒体解码,内存和磁盘缓存以及资源池化包含在一个简单易用的界面中。
[1] Handling Bitmaps
①. Bitmaps是很容易耗尽 App 的内存预算的。
Pixel phone 照相机像素达到4048 * 3036 px,
所使用的 Bitmaps configuration 是ARGB_8888,
默认 Api 级别是 9 或者更高(Android 2.3 及以上),
则加载一张照片到内存中需要的存储空间为 4048 * 3036 * 4个字节 = 48 MB
②. 如何规避 Bitmaps 消耗内存
适当管理线程,尽量不要在 UI 线程加载 Bitmaps ;否则,会降低 App 的性能,使得 App 响应变慢,甚至可能出现 ANR.
加载大量 Bitmaps 时使用磁盘缓存和内存管理;否则,App 界面的响应性和流动性会受到影响.
③. 建议
use the Glide library to fetch, decode, and display bitmaps in your app
[2] Glide 框架
①. Glide 使用基于自定义 HttpUrlConnection 的堆栈,而且还包括实用程序库插入到 Google 的 Volley项目或 Square 的 OkHttp 库。
Glide 的主要重点是尽可能平滑和快速地滚动任何类型的图像列表,但 Glide 对于几乎任何需要获取,调整大小和显示远程图像的情况也是有效的。
②. Glide 的使用
[1] 在 build.gradle 添加依赖
compile 'com.github.bumptech.glide:glide:4.0.0'
[2] 在 Activity 中
@Override public void onCreate(Bundle savedInstanceState) {
...
//一张图片
ImageView imageView = (ImageView) findViewById(R.id.my_image_view);
GlideApp.with(this).load("http://goo.gl/gEgYUd").into(imageView);
}
// 一组图片
@Override public View getView(int position, View recycled, ViewGroup container) {
final ImageView myImageView;
if (recycled == null) {
myImageView = (ImageView) inflater.inflate(R.layout.my_image_view, container, false);
} else {
myImageView = (ImageView) recycled;
}
String url = myUrls.get(position);
GlideApp
.with(myFragment)
.load(url)
.centerCrop()
.placeholder(R.drawable.loading_spinner)
.into(myImageView);
return myImageView;
}
[3] 总结
期待有一天,我的 github 上有我自己开源的框架,只为分享,只为共同实现知识的共享。感谢!
Glide
Android