【发布时间】:2011-05-31 01:29:58
【问题描述】:
在 Activity.java 的源代码中,我看到下面的一些方法:
public View findViewById(int id) {
return getWindow().findViewById(id);
}
及getWindow方法的定义:
public Window getWindow() {
return mWindow;
}
但是按照如下规则:
避免使用内部 Getter/Setter
在 C++ 等本地语言中 使用 getter 的常见做法(例如,我 = getCount()) 而不是直接访问该字段 (i = mCount)。这是 C++ 的一个好习惯,因为 编译器通常可以内联 访问,如果您需要限制或 调试字段访问,您可以添加 随时打码。
在 Android 上,这是一个坏主意。 虚拟方法调用很昂贵, 远不止实例字段 查找。遵循是合理的 常见的面向对象编程 实践并拥有 getter 和 setter 在公共接口中,但在一个 类,您应该始终访问字段 直接。
没有 JIT,直接字段访问是 比调用 a 快大约 3 倍 微不足道的吸气剂。使用 JIT(其中 直接现场访问与 访问本地),直接字段 访问速度大约是 7 倍 调用一个微不足道的吸气剂。这是 在 Froyo 中确实如此,但在 JIT 内联吸气剂的未来 方法。
所以我想知道为什么android开发者不直接访问这个mWindow对象?如果当前android版本的JIT不能内联访问,getWindow().findViewById(id)会比mWindow.findViewById(id)花费更多时间,findViewById是比较常用的方法。
【问题讨论】: