首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么HierarchyViewer的findViewById如此缓慢?

为什么HierarchyViewer的findViewById如此缓慢?
EN

Stack Overflow用户
提问于 2012-11-07 03:48:04
回答 3查看 1.3K关注 0票数 3

找到一些UI控件(例如一个按钮)需要5-6秒。

两个问题:

1)为什么这么慢?

2)有没有办法让它更快,或者找到UI控件的替代解决方案(在monkeyrunner测试范围内)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-11-09 03:47:42

我查看了一下Android的源代码,发现当你在monkeyrunner中使用findViewById搜索控件时,它实际上会遍历Android中所有运行窗口上的所有控件。

因此,如果你有一些暂停的(不可见的)活动,而不是销毁的,findViewById会花时间搜索它。

现在我有几个想法

a)在HierarhyViewer上使用getFocusedWindowName接口检查窗口显示是否正确。尝试先搜索此窗口,然后在findViewById(id,parent)方法中将其指定为父窗口。这样,我们就不会搜索Android上的所有窗口了。

2)尝试绕过com.android.chimpchat.hierarchyviewer.HierarchyViewer提供的接口,直接转到DeviceBridge类(它为相同的协议提供了稍微低一点的级别)。在这种情况下,我们可以精确地指出应该搜索哪个窗口,而不是获取所有窗口的所有控件。

正如罗曼指出的那样。HierarchyViewer在未来可能会发生变化。然而,作为测试自动化的一部分,我没有看到任何其他的替代方法。

票数 3
EN

Stack Overflow用户

发布于 2012-11-07 03:53:00

通常,只需找到控件一次并将其存储在一个字段中就足够了。

对于适配器视图,它们通常将对其子视图的所有引用存储在一个对象中,然后使用setTag()将该对象附加到视图。稍后,可以使用getTag()为相同的视图检索它。您可以在网上搜索ViewHolder示例,以了解此技术

我怀疑,虽然这需要5-6秒,但你可能有太多的控制……

票数 1
EN

Stack Overflow用户

发布于 2012-11-07 05:02:10

虽然AndroidViewClient并不快,因为它依赖于与HierarchyViewer相同的协议,但它可能为编写测试提供了一种更简单的替代方案。

看一看examples。也有一些情况下,AndroidViewClient为已知的monkeyrunner bug提供了变通方法(请参阅此example)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13258277

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档