在实际项目中,我们可能需要统计我们应用程序中drawable下的图片或文本在都载入的情况,最多会占用多少内存 ,以对其做定性分析。

关于Android中图片占用内存的计算,请参照《Android中图片占用内存的计算》

以下就是一个简单的统计代码:
static void test(Context context){
final String TAG="robin";
long m=0;
long n=0;
Class c=R.drawable.class;
Field f[]=c.getFields();
int id=0;
int w=0;
int h=0;
Resources res=context.getResources();
for(int i=0;i<f.length;i++){
try {
id=f[i].getInt(null);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
Drawable d=res.getDrawable(id);
if(d instanceof BitmapDrawable){
Bitmap b=((BitmapDrawable)d).getBitmap();
w=b.getWidth();
h=b.getHeight();
n=w*h;
Log.i(TAG,"the size of "+f[i].getName()+" is "+w+"X"+h +" pixels");
m=m+n;
}
}
Log.i(TAG,"the area of all bitemap is "+m );
m=m<<1;
Log.w(TAG,"in Config.RGB_565,the memory occupied by bitemap:"+(m>>20)+"M"+((m&((1<<20)-1))>>10)+"K");
m=m<<1;
Log.w(TAG,"in Config.ARGB_8888,the memory occupied by bitemap:"+(m>>20)+"M"+((m&((1<<20)-1))>>10)+"K");
c=R.string.class;
f=c.getFields();
String str=null;
m=0;
for(int i=0;i<f.length;i++){
try {
id=f[i].getInt(null);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
str=res.getString(id);
m=m+str.length()*2;
}
Log.i(TAG,"string:"+(m>>20)+"M"+((m&((1<<20)-1))>>10)+"K"+(m&((1<<10)-1)));
}
运行结果:
I/robin (21677): the size of app_detail_bottom_menu_divider is 3X5 pixels
I/robin (21677): the size of cancel is 51X52 pixels
I/robin (21677): the size of confirm is 51X52 pixels
I/robin (21677): the size of ic_launcher is 96X96 pixels
I/robin (21677): the size of item1 is 640X1067 pixels
I/robin (21677): the size of item2 is 2560X1600 pixels
I/robin (21677): the size of item3 is 2560X1600 pixels
I/robin (21677): the size of item4 is 2560X1600 pixels
I/robin (21677): the size of item5 is 2560X1600 pixels
I/robin (21677): the size of item6 is 2560X1600 pixels
I/robin (21677): the size of item7 is 2560X1600 pixels
I/robin (21677): the size of splash is 640X1067 pixels
I/robin (21677): the area of all bitemap is 25956295
W/robin (21677): in Config.RGB_565,the memory occupied by bitemap:49M519K
W/robin (21677): in Config.ARGB_8888,the memory occupied by bitemap:99M15K
I/robin (21677): string:0M0K432
结束!

Android中应用程序drawable图片资源占用内存的统计相关推荐

  1. Android字体占有内存,android随意创建字体对象引发的应用程序运行时占用内存过大...

    android随意创建字体对象引发的应用程序运行时占用内存过大 在实际开发android项目过程中,由于是初次设置android系统没有的字体,所以用到了一个外部文件FounderFineRoundS ...

  2. linux 程序占内存,linux下,一个运行中的程序,究竟占用了多少内存

    1. 在linux下,查看一个运行中的程序, 占用了多少内存, 通常的命令有php (1). ps aux:html 其中  VSZ(或VSS)列 表示,程序占用了多少虚拟内存.linux RSS列 ...

  3. Android中实现“程序前后台切换效果”和“返回正在运行的程序,而不是一个新Activity”...

    ANDROID 一.首先是返回正在运行的程序,而不是新的ACTIVITY. 多网上关于 通知栏的例子都是打开一个新的Activity,代码也很多. 根据那些代码如下     public void s ...

  4. android的内存泄露有几种,Android中几种有可能会导致内存泄露的情况

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 1.Static静态成员导致的内存泄露 将占用大量内存空间的变量声明为static静态类型.当Activity被销毁的时 ...

  5. Android 中的各种 Drawable 你都知道了吗?

    文章目录 Drawable BitmapDrawable NinePatchDrawable ShapeDrawable LayerDrawable StateListDrawable LevelLi ...

  6. Android源码解析之Bitmap占用内存正确的计算公式 你知道吗

    Bitmap 前言 Bitmap简介 像素存储方式 图片压缩格式 Bitmap内存计算 获取Bitmap所占内存 计算所占内存 举例 Bitmap.getAllocationByteCount Bit ...

  7. 你都知道么?Android中21种drawable标签大全

    前言 我们在drawable目录下可以创建很多自定义的资源,其中用的最多的应该就是selector和shape.目前在Android中有21种drawable标签,了解和利用这些标签对我们的开发有很大 ...

  8. 解决Golang程序运行时占用内存不断增加的问题

    日常开发时遇到了这样的问题:死循环程序打包为exe后执行exe文件,打开任务管理器,发现程序占用内存在不断增加. 解决方式: 删掉defer语句 删掉fmt.Print语句提高性能 循环语句中添加ru ...

  9. Android中apk加固完善篇之内存加载dex方案实现原理(不落地方式加载)

    一.前言 时隔半年,困扰的问题始终是需要解决的,之前也算是没时间弄,今天因为有人在此提起这个问题,那么就不能不解决了,这里写一篇文章记录一下吧.那么是什么问题呢? 就是关于之前的一个话题:Androi ...

最新文章

  1. printf(%d, -10u); 这个输出什么呀, 0或1?
  2. Swift - 类型属性(类静态属性)和类方法(类静态方法)
  3. Spring Mvc Url和参数名称忽略大小写
  4. 智能会议系统(33)---WebRTC学习之四:最简单的语音聊天
  5. ListView原理
  6. Java---集合类框架图
  7. 【面试刷题复习】更新中 2021.8.30
  8. Mac电脑上java如何手动释放内存?
  9. iphone 抹除设备是什么意思_环保设备公司什么意思?|危汇网|
  10. CentOS下通过代理安装rails
  11. 三边定位算法 matlab,三边测量法的MATLAB定位程序说明.doc
  12. react-native-root-siblings 在应用的根元素之后添加兄弟元素
  13. 002_wz_kaggle泰坦尼克号深度学习实现
  14. 软考程序员c语言、Java和c++考点
  15. 孙陶然:有能力的第二个标准是业绩好
  16. CocoaPods使用中的invalid byte sequence in US-ASCII错误
  17. ROS2-Foxy安装流程
  18. json转换格式错误
  19. 内网安全:隧道技术详解
  20. 手把手教学爬小姐姐图片(jsoup)

热门文章

  1. 重装xp后恢复wubi安装的ubuntu
  2. CSS如何实现数字分页效果
  3. PHP的单引号和双引号
  4. Firebug Console API
  5. 彻底分析ARP病毒查杀防范全攻略
  6. mcollective的web控制台---mcomaster搭建
  7. 一篇文章学会CORS
  8. 吴颖二:12.27 什么是现货,如何操作才能盈利
  9. 利用SCCM 2007 软件分发
  10. error C2143: 语法错误 : 缺少“;”(在“using”的前面)