Android 代码优化
2010-03-31 21:23:00 来源:WEB开发网综上所述:foreach语法在运用于array时性能很好,但是运用于其他集合对象时要小心,因为它会产生额外的对象。
避免使用枚举
枚举变量非常方便,但不幸的是它会牺牲执行的速度和并大幅增加文件体积。例如:
public class Foo {
public enum Shrubbery { GROUND, CRAWLING, HANGING }
}
会产生一个900字节的.class文件(Foo$Shubbery.class)。在它被首次调用时,这个类会调用初始化方法来准备每个枚举变量。每个枚举项都会被声明成一个静态变量,并被赋值。然后将这些静态变量放在一个名为”$VALUES”的静态数组变量中。而这么一大堆代码,仅仅是为了使用三个整数。
这样:
Shrubbery shrub = Shrubbery.GROUND;
会引起一个对静态变量的引用,如果这个静态变量是final int,那么编译器会直接内联这个常数。
一方面说,使用枚举变量可以让你的API更出色,并能提供编译时的检查。所以在通常的时候你毫无疑问应该为公共API选择枚举变量。但是当性能方面有所限制的时候,你就应该避免这种做法了。
有些情况下,使用ordinal()方法获取枚举变量的整数值会更好一些,举例来说,将:
view sourceprint?1.for (int n = 0; n < list.size(); n++) {
2.if (list.items[n].e == MyEnum.VAL_X)
3.// do stuff 1
4.else if (list.items[n].e == MyEnum.VAL_Y)
5.// do stuff 2
6.}
7.
替换为:
view sourceprint?01.int valX = MyEnum.VAL_X.ordinal();
02.int valY = MyEnum.VAL_Y.ordinal();
03.int count = list.size();
04.MyItem items = list.items();
05.for (int n = 0; n < count; n++)
06.{
07.int valItem = items[n].e.ordinal();
08.if (valItem == valX)
09.// do stuff 1
10.else if (valItem == valY)
11.// do stuff 2
12.}
13.
会使性能得到一些改善,但这并不是最终的解决之道。
将与内部类一同使用的变量声明在包范围内
请看下面的类定义:
view sourceprint?01.public class Foo {
更多精彩
赞助商链接