一张图片资源要占用多大内存,可以用下面的计算公式计算

4 * withPixel*(targetDensity /sourcedensity) * heightPixel*(targetDensity /sourcedensity)

4的意思是RGBA8888要占用4个字节
widthPixel和heightPixel是图片尺寸
targetDensity是安装的目标机器的dpi
sourcedensity是图片资源放置的drawble目录对应的dpi

举一个简单的例子

一张522*686的PNG 图片,我把它放到 drawable-xxhdpi 目录下,在A机上加载,占用内存2547360B,其中 density 对应 xxhdpi 为480,targetDensity 对应A机的密度为640:

522/480 * 640 * 686/480 *640 * 4 = 2546432B

如果把同一张图片资源放到drawable-xxxhdpi 目录下,同样在A机上加载,占用内存1426880,其中density 对应 xxxhdpi 为640,targetDensity 对应A机的密度为640:

522/640 * 640 * 686/640 *640 * 4 = 1426880B

从上面的例子可以看出,图片加载到内存和图片大小本身没有关系,只与图片的尺寸和图片放置的资源目录有关,如果资源目录放置不正确,同样的图片资源占用内存可能翻倍,所以图片资源,尽量按各分辨率进行补全,不要在高分辨率的机器上使用低分别率目录里的资源。

获取图片占用内存大小:先获取bitmap对象,然后调用下面的api
public int getBitmapSize(Bitmap bitmap){
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT){ //API 19
return bitmap.getAllocationByteCount();
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR1){//API 12
return bitmap.getByteCount();
} else {
return bitmap.getRowBytes() * bitmap.getHeight(); //earlier version
}
}

https://www.jianshu.com/p/4c7d8600fbb9

一张图片资源要占用多大内存xhdpi xxhdpi的更多相关文章

  1. 高端面试必备:一个Java对象占用多大内存

    这个问题一般会出现在稍微高端一点的 Java 面试环节.要求面试者不仅对 Java 基础知识熟悉,更重要的是要了解内存模型. Java 对象模型 HotSpot JVM 使用名为 oops (Ordi ...

  2. 一个Java对象到底占用多大内存?

    最近在读<深入理解Java虚拟机>,对Java对象的内存布局有了进一步的认识,于是脑子里自然而然就有一个很普通的问题,就是一个Java对象到底占用多大内存? 在网上搜到了一篇博客讲的非常好 ...

  3. 一个Java对象到底占用多大内存

    在网上搜到了一篇博客讲的非常好,里面提供的这个类也非常实用: import java.lang.instrument.Instrumentation; import java.lang.reflect ...

  4. 快速解析超大XML不占用太大内存

    import xml.etree.ElementTree as ET def parse_res(xml_file): res_dic = {} tmp_lst_lev1 = [] tmp_lst_l ...

  5. mui 每次页面跳转用mui.openWindow会不会占用很大内存?

    http://ask.dcloud.net.cn/question/5384 不能每次用mui.openWindow.不用的webview要close,一个webview被close后会露出其他没有被 ...

  6. Java中的String到底占用多大的内存空间?你所了解的可能都是错误的!!

    写在前面 最近小伙伴加群时,我总是问一个问题:Java中的String类占用多大的内存空间?很多小伙伴的回答着实让我哭笑不得,有说不占空间的,有说1个字节的,有说2个字节的,有说3个字节的,有说不知道 ...

  7. Android 开发绕不过的坑:你的 Bitmap 究竟占多大内存?

    0.写在前面 本文涉及到屏幕密度的讨论,这里先要搞清楚 DisplayMetrics 的两个变量,摘录官方文档的解释: density:The logical density of the displ ...

  8. 一个Java对象到底占多大内存

    最近在读<深入理解Java虚拟机>,对Java对象的内存布局有了进一步的认识,于是脑子里自然而然就有一个很普通的问题,就是一个Java对象到底占用多大内存? 在网上搜到了一篇博客讲的非常好 ...

  9. 一个Java对象到底占多大内存?(转)

    最近在读<深入理解Java虚拟机>,对Java对象的内存布局有了进一步的认识,于是脑子里自然而然就有一个很普通的问题,就是一个Java对象到底占用多大内存? 在网上搜到了一篇博客讲的非常好 ...

随机推荐

  1. ThymeLeaf的eclipse插件安装

    “Help”----“Install New Software...” 输入: http://www.thymeleaf.org/eclipse-plugin-update-site/ 一路Next, ...

  2. Doing Homework HDU - 1074 (状压dp)

    Ignatius has just come back school from the 30th ACM/ICPC. Now he has a lot of homework to do. Every ...

  3. mac host文件配置

    Shift+Command+G 三个组合按键,并输入 Hosts 文件的所在路径:/etc/hosts /private/etc/hosts

  4. hd loadBalanceServer F5 BIG-IP / Citrix NetScaler / Radware / Array / HAProxy /

    s 五.Citrix NetScaler 和 CDN 案例 问题描述: Citrix 10.5.66.9软件版本下,存在计时器bug,此bug会造成CDN长连接回源超过设备默认的180S,会发fin包 ...

  5. html body 100%

    html body 100% html <div class="header"> </div> <div class="main" ...

  6. HDU - 1542 Atlantis(线段树求面积并)

    https://cn.vjudge.net/problem/HDU-1542 题意 求矩形的面积并 分析 点为浮点数,需要离散化处理. 给定一个矩形的左下角坐标和右上角坐标分别为:(x1,y1).(x ...

  7. [Android] Android v4包CompoundButtonCompatLollipop.class重复问题

    用 Butter Knife  8.8.1  导致v4包CompoundButtonCompatLollipop.class重复问题 详细错误如下: Error:Execution failed fo ...

  8. html 表格边线设置

    <table rules="all" style="margin-left: auto; margin-right: auto; margin-top: 50px; ...

  9. HTML&CSS总结

    HTML 如果把网页比作房子的话,那么HTML就是搭建房子的整体结构,CSS就是对房子进行装修,HTML主要涉及各种标签的使用,总结如下,需要补充的一点是行内标签与块级标签的区别 inline:在一行 ...

  10. JAVA线程池ScheduledExecutorService周期性地执行任务 与单个Thread周期性执行任务的异常处理

    本文记录: 1,使用ScheduledExecutorService的 scheduleAtFixedRate 方法执行周期性任务的过程,讨论了在任务周期执行过程中出现了异常,会导致周期任务失败. 2 ...