如果我要在我的活动中创建对所需视图元素(例如EditText
或Button
)的本地引用(在onCreate()
中)并使用它们进行访问,那么速度会有明显改善吗?需要的元素,或者当我需要访问某个特定元素时总是使用findViewById()
时,这并不重要吗?
答案 0 :(得分:4)
这是一个老问题,但是让我发布我的答案给任何碰巧像我一样好奇的人:至少在api等级17(4.2.2),DFS(深度优先搜索)用于寻找视图,并且不存在缓存机制(意味着每次调用findViewById()
时都会重复搜索。)
答案 1 :(得分:3)
如果你有一个复杂的布局并且你经常访问那些View
,那将会提高速度。最好定义私有变量,并将它们绑定到findViewById
中onCreate()
返回的引用,然后在整个代码中访问它们。
如果您只是访问这些视图一次,比方说,向他们添加OnClickListeners,我认为不需要创建本地引用,就像调用它们一样。
答案 2 :(得分:2)
如果您使用的是ListActivity,那么这就是View Holder模式所倡导的。我会说这取决于视图刷新的频率。
以下是来自Google I / O的视频和pdf,其中介绍了如何在ListAdapter的getView方法中实现ViewHolder模式