android 手机屏幕密度等级和屏幕逻辑尺寸
- 逻辑像素密度,是 rom 厂商设定的值,一般是取实际屏幕密度最接近的屏幕密度等级对应的值。
getResources().getDisplayMetrics().densityDpi 可以获取到该值
一张图片到底占用的内存有多大?
private int sizeOf(Bitmap value) {
return value.getRowBytes() * value.getHeight();
}
通过这个方法,我们就可以获取到一张 Bitmap 在运行时到底占用多大内存了。
给我一张图片,我来告诉你内存占用多大
//逻辑像素密度
int inTargetDensity = getResources().getDisplayMetrics().densityDpi;
int scaleWidth = (int) (500f * inTargetDensity / densityDpi + 0.5);
int scaleHeight = (int) (645f * inTargetDensity / densityDpi + 0.5);
int memory = scaleWidth * scaleHeight * 4;
- 其中 densityDpi 与 图片放入的文件夹有关,mdpi为160;hdpi为240;xhdpi为320;xxhdpi为480;xxxdpi为640.
总结
其实,通过前面的代码跟踪,我们就不难知道,Bitmap 在内存当中占用的大小其实取决于:
-
色彩格式,前面我们已经提到,如果是 ARGB8888 那么就是一个像素4个字节,如果是 RGB565 那就是2个字节
-
原始文件存放的资源目录(是 hdpi 还是 xxhdpi 可不能傻傻分不清楚哈)
-
目标屏幕的密度(所以同等条件下,红米在资源方面消耗的内存肯定是要小于三星S6的)
网友评论