Android面试题:大图加载,防止OOM
时间:2020-07-15
本文章向大家介绍Android面试题:大图加载,防止OOM,主要包括Android面试题:大图加载,防止OOM使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
这是字节面试官问的一个问题,平时Glide用惯了,让我说大图加载原理答不上来。
大图如果直接加载到内存,往往会导致OOM,因为大图所占内存非常大。
Bitmap直接加载
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.hqimage);
imageView.setImageBitmap(bitmap);
直接从资源中加载,方法非常简单,拿到Bitmap对象然后塞入ImageView中即可。这方式小图片还能正常加载,大图片就有问题了。
大图加载步骤
- 获取大图尺寸
- 获取ImageVIew的尺寸,缩放减小内存
- 加载
大图尺寸获取
BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.qb, options);
执行结果可以看到bitmap并未加载,而是获取到了图片的大小:outHeight和outWidth
减小内存
- 根据ImageView大小计算缩放比例inSampleSize
- 选择占内存小的颜色模式,设置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位表示 |
原文地址:https://www.cnblogs.com/billshen/p/13308650.html
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- SpringBoot缓存应用实践
- 为什么应该使用 Go module proxy
- 谁能想到,我给技术总监“上了一课”
- 设计模式速览
- 序列模型——吴恩达深度学习课程笔记(五)
- 30分钟学会pyecharts数据可视化
- 用Keras从零开始6步骤训练神经网络
- Keras结构化数据预处理范例——Titanic生存预测
- 从原理上搞懂如何设置线程池参数大小?
- Keras图像数据预处理范例——Cifar2图片分类
- Keras文本数据预处理范例——IMDB影评情感分类
- JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof 使用详解
- Go 垃圾回收
- 如何在SpringBoot中异步请求和异步调用
- 实现 memcached 客户端:TCP、连接池、一致性哈希、自定义协议