Lazy loaded image
技术分享
🗒️Android面试题:大图加载,防止OOM
字数 245阅读时长 1 分钟
2020-7-15
2023-10-24
type
status
date
slug
summary
tags
category
icon
password
这是字节面试官问的一个问题,平时Glide用惯了,让我说大图加载原理答不上来。大图如果直接加载到内存,往往会导致OOM,因为大图所占内存非常大。

Bitmap直接加载

直接从资源中加载,方法非常简单,拿到Bitmap对象然后塞入ImageView中即可。这方式小图片还能正常加载,大图片就有问题了。

大图加载步骤

  1. 获取大图尺寸
  1. 获取ImageVIew的尺寸,缩放减小内存
  1. 加载

大图尺寸获取

执行结果可以看到bitmap并未加载,而是获取到了图片的大小:outHeight和outWidth
notion image

减小内存

  1. 根据ImageView大小计算缩放比例inSampleSize
  1. 选择占内存小的颜色模式,设置option.inPreferredConfig,有以下值可以选择
参数取值
含义
ALPHA_8
图片中每个像素用一个字节(8位)存储,该字节存储的是图片8位的透明度值
RGB_565
图片中每个像素用两个字节(16位)存储,两个字节中高5位表示红色通道,中间6位表示绿色通道,低5位表示蓝色通道
ARGB_4444
图片中每个像素用两个字节(16位)存储,Alpha,R,G,B四个通道每个通道用4位表示
ARGB_8888
图片中每个像素用四个字节(32位)存储,Alpha,R,G,B四个通道每个通道用8位表示
上一篇
获取Android控件宽高
下一篇
Android面试题:讲一讲Glide的原理

评论
Loading...