Anroid面试专题(十二):图片大小的优化 及 三级缓存

面试官:“你在项目中处理过图片吗,说一下你是如何对它做优化的,及三级缓存是什么?”

我们可以这样一步一步来回答:

1.一张图的大小是怎么计算的

Anroid面试专题(十二):图片大小的优化 及 三级缓存_第1张图片

要回答这个问题,我们要先从图片说起,从图片的像素说起:

如图,我们可以看到一张像拼图似的图片,这里面最小的那个小方格,就相当于我们说的一个像素。

那为什么我们在看图片的时候看不到那一个一个的小方格呢?

这是因为我们图片的像素特别的多,特别的小。

我们再来说一下 如何计算 一张图片的大小:

图片的大小 = 一个像素点的大小 × 像素的总个数

2.优化一张图的方法

我们知道了图片的大小是怎么计算的,那对于优化图片,我们不难想到2个思路:

  • ①减小每个像素的大小

  • ②减小像素的总个数

Android其实给我们提供了2个参数进行优化图片:

它们就是BitmapFactory.Options当中的

  • inPreferredConfig

    设置图片解码后的像素格式,如ARGB_8888/RGB_565

那 ARGB_8888/RGB_565表示的又是什么意思呢?

ARGB_8888表示:

A(透明度) 要占用8位,

R 要占用8位,

G 要占用8位,

B 要占用8位,

这样组成一个像素的话,就是加在一起32位—也就占用4个字节。

而GRB_565一个像素占用5+6+5=16位=2字节。

所以如果我把之前图片由ARGB_8888 变成 RGB_565,则图片大小就变为原来的1/2了

  • inSampleSize

    设置图片的采样率进行图片的缩放显示。注意它的值必须为2的幂(即:2,4,8…)

    比如值为2,则加载图片的宽高是原来的 1/2,整个图片所占内存的大小就是原图的 1/4

Anroid面试专题(十二):图片大小的优化 及 三级缓存_第2张图片

3.做缓存与不做缓存的区别

Anroid面试专题(十二):图片大小的优化 及 三级缓存_第3张图片

  • 图片不做缓存,如左图:加载第一张图片时,在堆内存中开辟一块空间,当第1张图片不用了,加载第二张时,它又会在堆里面开辟新的空间,而不会复用之前的空间,即每次加载图片都开辟新的空间,容易出现oom.

  • 图片做缓存,如右图:加载第一张图片时,在堆内存中开辟一块空间,当第1张图片不用了,加载第2张时,它会先去比较,如果当前图片的大小<=堆内存已有的空间,就去复用之前的空间,而不用去开辟新的空间。

4.三级缓存的原理:

就是当 App需要引用缓存时,首先到内存缓存中读取,读取不到再到本地缓存中读取,还获取不到就到网络异步读取,读取成功之后再缓存到内存和本地中。

积累点滴,学一点是一点~

你可能感兴趣的:(Android面试大全,android)