在实际项目中,我们可能需要统计我们应用程序中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
结束!