安卓开发中经常会遇到因为图片处理不当导致的oom问题,因为系统分配给每个应用的最大内存空间是有限的,正常只有几十上百兆(排除通过特殊手段获取到几百兆内存空间的情况)。所以为了节省更多的空间需要对图片进行内存优化。

对于很多初学者来说应该都会有这样的疑惑:
只是加载了一张几百k的图片而已,为什么也会导致oom的问题?

想知道问题的答案我们得弄明白图片在内存中占用的空间大小是如何计算的。

1. 图片相关的几个概念:

像素:

像素是组成图片的最基本单元要素。可以看做是一个点。

分辨率:

分辨率是指在长和宽上各拥有的像素个数
假如有张分辨率是1080*1920的图片,那它的宽度方向上有1080个像素点,高度方向上有1920个像素点,所以这张图片总共拥有2073600个像素点。

2. 图片占用内存大小的计算:

2.1 图片的载体

图片加载到内存后是以bitmap的形式存在的,所以bitmap占用内存空间大小,就是图片在内存中占用空间的大小。

2.2 bitmap占用内存空间的计算

bitmap的内存大小是以图片像素点总数乘以每个像素点所占的内存大小的结果。
所以图片占用内存的大小只跟图片分辨率和每个像素点占用的内存大小有关。

2.3 图片的色彩格式

bitmap的每个像素占用内存的大小跟色彩格式有关。
系统为我们提供了四种色彩格式:

ARGB_8888:占用4个字节,默认该格式显示

ARGB_4444:占用2个字节

RGB_565:占用2个字节

ALPHA:占用1个字节

如果按照默认色彩格式显示的话,那么一张分辨率是1080*1920的图片加载到内存后占用空间的大小是:
1080 * 1920 * 4=8294400 byte,换算成m的话就是大概8m的空间大小。
所以说一张本地的图片可能只有几十上百k但是加载到内存后就会占用好几兆的空间。图片占用内存的大小只跟该图片的分辨率有关,跟图片在本地占用空间的大小无关。一张几十兆的图片如果分辨率低,而一张几十k的图片如果分辨率高的话,加载这两张图片到内存后不做任何处理,那么占用内存的大小反而是几十k的比几十兆的大。

3. 总结

图片占用内存大小的两个关键因素:

1.图片的分辨率
2.采用的色彩格式

本地图片跟加载到内存后的图片占用空间的大小之所以会差别很大,原因是因为本地的图片正常都是经过一定压缩的,但是只是压缩图片质量而已,并不会改变分辨率。所以你把一张图片压缩后输出到本地,再把该图片和原图加载到内存后会发现两张图片占用的内存大小是一样的,因为两张图片的分辨率是一样的。

安卓图片内存优化(一)——图片占用内存大小的计算相关推荐

  1. 内存优化 · 基础论 · 初识 Android 内存优化

    [小木箱成长营]内存优化系列文章: 内存优化 · 工具论 · 常见的 Android 内存优化工具和框架 内存优化 · 方法论 · 揭开内存优化神秘面纱 内存优化 · 实战论 · 内存优化实践与应用 ...

  2. Android内存优化之图片优化

    关于图片优化,大概如下 为什么要进行图片优化 相信大概刚开始学习Android的时候有过图片过大而直接报错的情况,下面简单介绍一下OOM问题,Android支持的图片格式及图片优化的几种方式 什么是O ...

  3. android 多图片优化工具,总结Android App内存优化之图片优化

    前言 在Android设备内存动不动就上G的情况下,的确没有必要去太在意APP对Android系统内存的消耗,但在实际工作中我做的是教育类的小学APP,APP中的按钮.背景.动画变换基本上全是图片,在 ...

  4. android加载大量图片内存优化,Android图片加载内存优化

    利用BitmapFactory.Options实现图片内存优化 通过设置options.inPreferredConfig控制内存占用 首先准备了一张1280x800的blue_bg.png图片,我们 ...

  5. 【Android 内存优化】图片文件压缩 ( Android 原生 API 提供的图片压缩功能能 | 图片质量压缩 | 图片尺寸压缩 )

    文章目录 一. 图片压缩 二. 图片文件压缩类型 三. Android 原生 API 提供的质量压缩 四. Android 原生 API 提供的尺寸压缩 一. 图片压缩 图片压缩 : ① 文件压缩 : ...

  6. Android内存优化之图片查重

    本文将图片重复分为两种类型: 1.APP运行时加载了多个相同的图片对象,造成了内存浪费 2.APK包中存在多个相同的图片文件,影响了APK包大小 下面分别进行讨论: ----------------- ...

  7. 1.内存优化(一)内存泄漏

    目录 内存泄漏 什么是内存泄漏 了解内存分配的几种策略 防止内存泄漏 内存泄漏的例子 如何找到项目中存在的内存泄露 确定是否存在内存泄露 哪些对象属于泄漏的(找出来) 定位内存泄露的原因所在 如何在应 ...

  8. iis占用服务器内存,W3wp.exe 进程占用内存高消耗CPU近100%导致网站反应速度缓慢的解决方案...

    如何降低W3WP.EXE占用的内存和CPU?结合网上的诸多建议,主要的解决办法是: a.在IIS中对每个网站进行单独的应用程序池配置: b.合理的配置你的应用程序池: c.找出具体网站站点的程序问题. ...

  9. mysql 内存 256m_解决mySQL占用内存超大问题

    为了装mysql环境测试,装上后发现启动后mysql占用了很大的虚拟内存,达8百多兆.网上搜索了一下,得到高人指点my.ini.再也没见再详细的了..只好打开my.ini逐行的啃,虽然英文差了点,不过 ...

  10. mysql占用多少内存_解决mySQL占用内存超大问题

    解决mySQL占用内存超大问题 解决mySQL占用内存超大问题 为了装mysql环境测试,装上后发现启动后mysql占用了很大的虚拟内存,达8百多兆.网上搜索了一下,得到高人指点my.ini.再也没见 ...

最新文章

  1. 影像组学视频学习笔记(35)-基于2D超声影像的影像组学特征提取、Li‘s have a solution and plan.
  2. python3: print()函数:def,end关键字介绍
  3. python代码大全下载-大神整理的python资源大全
  4. day 31 进程的其他方法 进程锁 进程队列
  5. 服务发现技术是如何演进出来的?
  6. ArcGIS删除地图投影坐标,只保留地理坐标
  7. 用汇编语言写的第一个DOS程序
  8. patran如何看屈曲因子_校准证书中的修正值、修正因子,你真的会用吗?
  9. 算法分析--数量级比较
  10. Linux开启可视化进程传递pts,Linux下tty/pty/pts/ptmx详解(转)
  11. 蚂蚁集团SOFAStack:新一代分布式云PaaS平台,打造企业上云新体验
  12. 为什么屠呦呦获得了诺贝尔奖却没被评上中科院院士?...
  13. python深复制_Python深浅拷贝
  14. vs2017 visual studio2017 密钥 激活码
  15. 【找工作必读】来自IT公司速查手册的各大IT公司薪资
  16. 电脑更换硬盘应该注意什么?
  17. CentOS 7 安装Ibus中文输入法
  18. DJNZ指令:DJNZ R6,D2 ;
  19. 2022年湖南省导游资格(导游服务能力)练习题及答案
  20. 2021牛客寒假算法基础集训营1 E.三棱锥之刻

热门文章

  1. linux-mptcp调度算法,基于RSFSA的MPTCP数据调度算法的研究
  2. CEVA DSP使用心得
  3. 2022年东南大学930人工智能专业基础考研经验分享(附带资料)
  4. 像麦肯锡咨询师一样做商业分析_课程笔记 模块一:问题界定
  5. 2018北邮网研院机试真题
  6. 宁波大学考博c语言真题,宁波大学2017年考博英语真题
  7. 芯片行业是不是过热了
  8. 2023,特斯拉、比亚迪王者之争
  9. 比亚迪财报,高光与隐忧并存
  10. 整型数据的输入和输出。