在实际项目中,我们可能需要统计我们应用程序中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图片资源占用内存的统计相关推荐
- Android字体占有内存,android随意创建字体对象引发的应用程序运行时占用内存过大...
android随意创建字体对象引发的应用程序运行时占用内存过大 在实际开发android项目过程中,由于是初次设置android系统没有的字体,所以用到了一个外部文件FounderFineRoundS ...
- linux 程序占内存,linux下,一个运行中的程序,究竟占用了多少内存
1. 在linux下,查看一个运行中的程序, 占用了多少内存, 通常的命令有php (1). ps aux:html 其中 VSZ(或VSS)列 表示,程序占用了多少虚拟内存.linux RSS列 ...
- Android中实现“程序前后台切换效果”和“返回正在运行的程序,而不是一个新Activity”...
ANDROID 一.首先是返回正在运行的程序,而不是新的ACTIVITY. 多网上关于 通知栏的例子都是打开一个新的Activity,代码也很多. 根据那些代码如下 public void s ...
- android的内存泄露有几种,Android中几种有可能会导致内存泄露的情况
8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 1.Static静态成员导致的内存泄露 将占用大量内存空间的变量声明为static静态类型.当Activity被销毁的时 ...
- Android 中的各种 Drawable 你都知道了吗?
文章目录 Drawable BitmapDrawable NinePatchDrawable ShapeDrawable LayerDrawable StateListDrawable LevelLi ...
- Android源码解析之Bitmap占用内存正确的计算公式 你知道吗
Bitmap 前言 Bitmap简介 像素存储方式 图片压缩格式 Bitmap内存计算 获取Bitmap所占内存 计算所占内存 举例 Bitmap.getAllocationByteCount Bit ...
- 你都知道么?Android中21种drawable标签大全
前言 我们在drawable目录下可以创建很多自定义的资源,其中用的最多的应该就是selector和shape.目前在Android中有21种drawable标签,了解和利用这些标签对我们的开发有很大 ...
- 解决Golang程序运行时占用内存不断增加的问题
日常开发时遇到了这样的问题:死循环程序打包为exe后执行exe文件,打开任务管理器,发现程序占用内存在不断增加. 解决方式: 删掉defer语句 删掉fmt.Print语句提高性能 循环语句中添加ru ...
- Android中apk加固完善篇之内存加载dex方案实现原理(不落地方式加载)
一.前言 时隔半年,困扰的问题始终是需要解决的,之前也算是没时间弄,今天因为有人在此提起这个问题,那么就不能不解决了,这里写一篇文章记录一下吧.那么是什么问题呢? 就是关于之前的一个话题:Androi ...
最新文章
- printf(%d, -10u); 这个输出什么呀, 0或1?
- Swift - 类型属性(类静态属性)和类方法(类静态方法)
- Spring Mvc Url和参数名称忽略大小写
- 智能会议系统(33)---WebRTC学习之四:最简单的语音聊天
- ListView原理
- Java---集合类框架图
- 【面试刷题复习】更新中 2021.8.30
- Mac电脑上java如何手动释放内存?
- iphone 抹除设备是什么意思_环保设备公司什么意思?|危汇网|
- CentOS下通过代理安装rails
- 三边定位算法 matlab,三边测量法的MATLAB定位程序说明.doc
- react-native-root-siblings 在应用的根元素之后添加兄弟元素
- 002_wz_kaggle泰坦尼克号深度学习实现
- 软考程序员c语言、Java和c++考点
- 孙陶然:有能力的第二个标准是业绩好
- CocoaPods使用中的invalid byte sequence in US-ASCII错误
- ROS2-Foxy安装流程
- json转换格式错误
- 内网安全:隧道技术详解
- 手把手教学爬小姐姐图片(jsoup)
热门文章
- 重装xp后恢复wubi安装的ubuntu
- CSS如何实现数字分页效果
- PHP的单引号和双引号
- Firebug Console API
- 彻底分析ARP病毒查杀防范全攻略
- mcollective的web控制台---mcomaster搭建
- 一篇文章学会CORS
- 吴颖二:12.27 什么是现货,如何操作才能盈利
- 利用SCCM 2007 软件分发
- error C2143: 语法错误 : 缺少“;”(在“using”的前面)