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

本文探讨了Android面试中关于图片优化的问题,包括计算图片大小的原理、优化图片的方法(如调整像素格式和采样率)、做缓存与不做缓存的区别,以及三级缓存的工作原理。通过理解这些概念,可以有效防止应用中出现OOM问题并提高用户体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

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

在这里插入图片描述

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

在这里插入图片描述

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

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

4.三级缓存的原理:

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值