Android App开发之图片加载框架以及原理总结

2017年11月9日08:30:02 发表评论 18 views

今天我们简单总结一下,Android APP开发之图片加载框架的区别,可以在面试之前简单看一下。

本文只是对框架以及原理的简单概括,并不涉及代码,如果想了解框架的具体使用规则,直接去github看教程吧。

接下来我们开始讲解:

Android原生没有提供加载网络图片的方案。

第三方图片加载库:

UniversalImageLoader:老牌优秀的图片加载类库,特点是配置项丰富,支持圆形图片效果显示以及添加图片加载动画。

Picasso : Square公司出品。也是很早期出现的图片加载库。默认加载图片不会压缩,并且图片渲染模式是ARGB_8888,占用内存相比Glide稍微高一点,但是可以指定图片加载的宽高,便会依据图片的宽高进行缩放。

Glide:专门为优化Picasso而生,所以API和Picasso简直一模一样。内部会自动根据图片的宽高来压缩图片,并且图片渲染模式为RGB_565,内存占用会减少一半,专门针对滑动中的图片加载有优化。和Picasso相比,推荐使用Glide。

Fresco : Facebook公司开源的。特点是在android4.4以及以下,将图片的放入Android native的C++内存中,而不是Java堆内存,所以占用的Java堆内存很小,大大减小了程序出现OOM的几率;支持WebP和Gif显示;支持多种图片的显示配置,比如圆形。

以上是图片加载框架的简单介绍,接下来我们简单了解一下他们的加载原理:

了解一些关于图片的概念:

bit 位 一位二进制数

100Mb /8 12.5MB/s

Byte 8位二进制数

KB

MB

GB

TB

PB

单色位图 1位2进制数表示 一个像素 1byte 8位二进制数 1个像素占用1/8个byte 5000byte

16色位图 16位的二进制数 表示一个像素 16种颜色表示一个像素 1111 1111 1/2byte

256色位图 1个像素用256种颜色表示 2^8=256 1个byte对应一个像素 39k

24位位图 24位 位代表一位2进制数 24位二进制数 3byte 117k

argb8888 android默认情况 每个像素占用4byte内存

alpha 8 透明度 #66000000

Android App开发之图片加载框架以及原理总结

图片加载

图片三级缓存原理:

为什么要使用三级缓存

如今的 Android App 经常会需要网络交互,通过网络获取图片是再正常不过的事了。

假如每次启动的时候都从网络拉取图片的话,势必会消耗很多流量。在当前的状况下,对于非wifi用户来说,流量还是很贵的,一个很耗流量的应用,其用户数量级肯定要受到影响。

特别是,当我们想要重复浏览一些图片时,如果每一次浏览都需要通过网络获取,流量的浪费可想而知。

所以提出三级缓存策略,通过网络、本地、内存三级缓存图片,来减少不必要的网络交互,避免浪费流量。

什么是三级缓存

网络缓存, 不优先加载, 速度慢,浪费流量;

本地缓存, 次优先加载, 速度快;

内存缓存, 优先加载, 速度最快。

三级缓存原理

首次加载 Android App 时,肯定要通过网络交互来获取图片,之后我们可以将图片保存至本地SD卡和内存中。

之后运行 App 时,优先访问内存中的图片缓存,若内存中没有,则加载本地SD卡中的图片。

总之,只在初次访问新内容时,才通过网络获取图片资源。

  • yiisaa
  • 这是我的微信扫一扫
  • weinxin
  • zhengweiqiangcom
  • 我的微信公众号扫一扫
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: