本文涉及到屏幕密度的讨论,这里先要搞清楚 DisplayMetrics 的两个变量,简单来说,可以理解为 density 的数值是 1dp=density px;densityDpi 是屏幕每英寸对应多少个点(不是像素点),在 DisplayMetrics 当中,这两个的关系是线性的:为了不引起混淆,本文所有提到的密度除非特别说明,都指的是 densityDpi,当然如果你愿意,也可以用 density 来说明问题。另外,本文的依据主要来自 android 5.0 的源码,其他版本可能略有出入。

系统已提供Bitmap内存占用计算方法
做移动客户端开发的朋友们肯定都因为图头疼过,说起来曾经还有过 leader 因为组里面一哥们在工程里面加了一张 jpg 的图发脾气的事儿,哈哈。为什么头疼呢?吃内存呗,时不时还给你来个 OOM 冲冲喜,让你的每一天过得有滋有味(真是没救了)。那每次工程里面增加一张图片的时候,我们都需要关心这货究竟要占多大的坑,占多大呢?
Android API 有个方便的计算方法:
public final int getByteCount() {
// int result permits bitmaps up to 46,340 x 46,340
return getRowBytes() * getHeight();
}
通过这个方法,我们就可以获取到一张 Bitmap 在运行时到底占用多大内存了。
举个例子:
一张522x686 的 PNG 图片,我把它放到 drawable-xxhdpi 目录下,在三星s6上加载,占用内存2547360B,就可以用这个方法获取到。

本文探讨了Android中Bitmap内存占用的问题,解析了Bitmap.getByteCount()方法的计算原理,以及屏幕密度如何影响Bitmap的实际内存消耗。通过实例计算揭示了Bitmap内存占用的详细步骤,包括密度转换和精度调整的影响。
最低0.47元/天 解锁文章
7465

被折叠的 条评论
为什么被折叠?



