findViewById vs Activity中的本地引用

时间:2010-06-17 18:25:56

标签: android performance

如果我要在我的活动中创建对所需视图元素(例如EditTextButton)的本地引用(在onCreate()中)并使用它们进行访问,那么速度会有明显改善吗?需要的元素,或者当我需要访问某个特定元素时总是使用findViewById()时,这并不重要吗?

3 个答案:

答案 0 :(得分:4)

这是一个老问题,但是让我发布我的答案给任何碰巧像我一样好奇的人:至少在api等级17(4.2.2),DFS(深度优先搜索)用于寻找视图,并且不存在缓存机制(意味着每次调用findViewById()时都会重复搜索。)

答案 1 :(得分:3)

如果你有一个复杂的布局并且你经常访问那些View,那将会提高速度。最好定义私有变量,并将它们绑定到findViewByIdonCreate()返回的引用,然后在整个代码中访问它们。

如果您只是访问这些视图一次,比方说,向他们添加OnClickListeners,我认为不需要创建本地引用,就像调用它们一样。

答案 2 :(得分:2)

如果您使用的是ListActivity,那么这就是View Holder模式所倡导的。我会说这取决于视图刷新的频率。

以下是来自Google I / O的视频和pdf,其中介绍了如何在ListAdapter的getView方法中实现ViewHolder模式

The world of ListView