WEB开发网
开发学院手机开发Android 开发 Android 代码优化 阅读

Android 代码优化

 2010-03-31 21:23:00 来源:WEB开发网   
核心提示:综上所述:foreach语法在运用于array时性能很好,但是运用于其他集合对象时要小心,Android 代码优化(5),因为它会产生额外的对象,避免使用枚举枚举变量非常方便,举例来说,将:view sourceprint?1.for (int n = 0; n < list.size(); n++) {2.if

综上所述: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 {

上一页  1 2 3 4 5 6  下一页

Tags:Android 代码 优化

编辑录入:coldstar [复制链接] [打 印]
赞助商链接