当前位置: 首页 > 知识库问答 >
问题:

在android中使用可访问性服务获取大量ANR

马业
2023-03-14

我的密码是

    ArrayList<AccessibilityNodeInfo> collectNodes(AccessibilityNodeInfo node) {

    ArrayList<AccessibilityNodeInfo> nodeInfoArrayList = new ArrayList<>();
    try {
        int childCount = node.getChildCount();
        for (int index = 0; index < childCount; index++) {
            AccessibilityNodeInfo childNode = node.getChild(index);


            traverseNode(childNode);
            if (childNodes != null && childNodes.size() > 0) {
                nodeInfoArrayList.addAll(childNodes);
                childNodes.clear();
            }
        }
    }
    catch (Exception e){
        e.printStackTrace();
    }
    return nodeInfoArrayList;
}

private void traverseNode(AccessibilityNodeInfo node) {
    try {
        AccessibilityNodeInfo edittextNode = null;
        if (null == node)
            return;

        final int count = node.getChildCount();
        if (count > 0) {
            for (int i = 0; i < count; i++) {
                AccessibilityNodeInfo childNode = node.getChild(i);
                if (childNode == null) {
                    node.recycle();
                    return;
                }
                else {
                    traverseNode(childNode);
                }
            }
        } else {

        }
    }
    catch (Exception error){
        error.printStackTrace();
    }
}

有什么办法解决这个问题吗

共有1个答案

丘飞
2023-03-14

如果应用程序不响应对AccessibilityNodeInfo的请求,则AccessibilityService对它的请求将超时并返回NULL。该超时设置为5s。

如果您从没有响应的应用程序重复请求,您可能会等待很长时间。

在所示代码的第一部分中,即使失败,循环也将继续尝试遍历节点。这会导致很长时间的延误。

 类似资料:
  • 我正在开发缓存清理应用程序,在谷歌上做了研究后,我发现Android系统已经将“Clear_App_Cache”权限移到了“签名,特权”状态。所以我无法用方法清除缓存。 谷歌playstore上的应用程序,如CCleaner、Power Clean等。正在使用辅助功能服务删除缓存。 我也为我的应用程序创建了基本的可访问性服务,但不知道如何删除应用程序的缓存

  • 问题内容: 我已经安装了django服务器,可以如下访问 假设我的IP是xxxx。 当我在同一网络下的另一台PC上运行时 它不起作用。 我可以轻松地用那台计算机ping我的IP。 而且在我的81号港口我有apache,可以像下面这样方便地访问 可能是什么问题?我在Django是否需要其他东西 问题答案: 运行Django开发服务器 这就是你想要的。为了进一步帮助你,你应该执行以下操作: 顺便说一句

  • 我正在开发一个运行辅助功能服务的Android应用程序。我在AndroidStudio中开发了服务java类和配置xml文件,将其作为本机应用程序进行测试。当我运行它时,辅助功能服务会按预期显示在Android辅助功能设置中,我可以启用它。 然而,我想把这项服务集成在Qt快速Android应用程序中。当我添加相同的java类、清单和配置xml文件时,项目编译并运行良好,但服务不会出现在Androi

  • 我想以编程方式启用/禁用设置->辅助功能选项下列出的辅助功能服务。 我可以像下面这样开始可访问性意图: 但是对于如何通过我的代码启用视图中列出的服务,我没有任何想法。 请把你的观点告诉我。

  • 我已经为我的应用程序编写了自己的。在内部,它使用为通过我的应用导航的用户提供语音反馈。当打开和时,我从我的应用程序中获得口头反馈,然后是TalkBack的反馈。 有什么方法可以停止TalkBack为我的应用程序,因为我拥有我的应用程序的可访问性服务?

  • 我在让TalkBack使用Web视图时遇到问题(在Android 4.4.2上使用Nexus 5进行测试)。我读到TalkBack支持被添加到Android JellyBean发布前后的Web视图中,方法是检查标题为“增强Web可访问性”的首选项。我无法在系统设置中找到此首选项。 在我们的应用程序中,专注于Web视图只是读取“WebView”,并且不提供其他选项。我已经确定并调用了在Web视图上。