WEB开发网
开发学院手机开发Android 开发 如何成为Android编程高手 阅读

如何成为Android编程高手

 2010-08-23 01:18:00 来源:WEB开发网   
核心提示:(valItem == valX)// do stuff 1 14 15 else if (valItem == valY)// do stuff 2 16 17 }会使性能得到一些改善,但这并不是最终的解决之道,如何成为Android编程高手(10),将与内部类一同使用的变量声明在包范围内请看下面的类定义:1 pub
(valItem == valX)// do stuff 1 14 15 else if (valItem == valY)// do stuff 2 16 17 }

会使性能得到一些改善,但这并不是最终的解决之道。

将与内部类一同使用的变量声明在包范围内

请看下面的类定义:

1 public class Foo { 2 3 private int mValue; 4 5 public void run() { 6 7 Inner in = new Inner(); 8 9 mValue = 27; 10 11 in.stuff(); 12 13 } 14 private void doStuff(int value) { 15 16 System.out.println("Value is " + value); 17 18 } 19 private class Inner { 20 21 void stuff() { 22 23 Foo.this.doStuff(Foo.this.mValue); 24 } 25 26 } 27 28 }

这其中的关键是,我们定义了一个内部类(Foo$Inner),它需要访问外部类的私有域变量和函数。这是合法的,并且会打印出我们希望的结果"Value is 27"。

问题是在技术上来讲(在幕后)Foo$Inner是一个完全独立的类,它要直接访问Foo的私有成员是非法的。要跨越这个鸿沟,编译器需要生成一组方法:

1 2 static int Foo.access$100(Foo foo) { 3 4 return foo.mValue; 5 6 } 7 8 static void Foo.access$200(Foo foo, int value) { 9 10 foo.doStuff(value); 11 12 } 13

内部类在每次访问"mValue"和"doStuff"方法时,都会调用这些静态方法。就是说,上面的代码说明了一个问题,你是在通过接口方法访问这些成员变量和函数而不是直接调用它们。在前面我们已经说过,使用接口方法(getter、setter)比直接访问速度要慢。所以这个例子就是在特定语法下面产生的一个“隐性的”性能障碍。

通过将内部类访问的变量和函数声明由私有范围改为包范围,我们可以避免这个问题。这样做可以让代码运行更快,并且避免产生额外的静态方法。(遗憾的是,这些域和方法可以被同一个包内的其他类直接访问,这与经典的OO原则相违背。因此当你设计公共API的时候应该谨慎使用这条优化原则)

避免使用浮点数

在奔腾CPU出现之前,游戏设计者做得最多的就是整数运算。随着奔腾的到来,浮点运算处理器成为了CPU内置的特性,浮点和整数配合使用,能够让你的游戏运行得更顺畅。通常在桌面电脑上,你可以随意的使用浮点运算。

但是非常遗憾,嵌入式处理器通常没有支持浮点运算的硬件,所有对"float"和"double"的运算都是通过软件实现的。一些基本的浮点运算,甚至需要毫秒级的时间才能完成。

上一页  5 6 7 8 9 10 11  下一页

Tags:如何 成为 Android

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