Android 使用AccessibilityNodeInfo导致堆栈大小8MB错误

Android 使用AccessibilityNodeInfo导致堆栈大小8MB错误,android,accessibilityservice,Android,Accessibilityservice,我使用无障碍服务获取屏幕上的所有文本。正常工作几分钟后,它导致ANR,分配了一些GC…日志,几秒钟后,它因以下错误崩溃: 我的getAllTextViews()方法: private void getAllTextViews(AccessibilityNodeInfo nodeInfo, StringBuilder stringBuilder) { if (nodeInfo == null) return; if (!TextUtils.isEmpty(node

我使用无障碍服务获取屏幕上的所有文本。正常工作几分钟后,它导致ANR,分配了一些
GC…
日志,几秒钟后,它因以下错误崩溃:

我的
getAllTextViews()
方法:

private void getAllTextViews(AccessibilityNodeInfo nodeInfo, StringBuilder stringBuilder) {
        if (nodeInfo == null) return;
        if (!TextUtils.isEmpty(nodeInfo.getText())) {
            stringBuilder.append(" " + nodeInfo.getText());
        }
        for (int i = 0; i < nodeInfo.getChildCount(); i++) {
            getAllTextViews(nodeInfo.getChild(i), stringBuilder);
        }
    }
private void GetAllTextView(AccessibilityNodeInfo节点信息,StringBuilder StringBuilder){
if(nodeInfo==null)返回;
如果(!TextUtils.isEmpty(nodeInfo.getText())){
追加(“+nodeInfo.getText());
}
对于(int i=0;i

任何帮助都将不胜感激。非常感谢

您需要的是在使用信息后使用
AccessibilityNodeInfo
recycle()
方法。

您在
getAllTextView
中遇到了一个无限循环,尽管我无法立即告诉您在哪里。在每次调用
getAllTextViews
之前,请尝试输出
stringBuilder
的内容,您应该会看到它被卡住的地方。@JakeSteam hi。它不是一个无限循环,因为我把
nodeInfo==null
检查放在里面。我也得到了结果。只是在某些情况下,它会随机抛出该错误。在这种情况下,听起来有时候堆栈要处理的文本视图太多了。我建议要么设置一个最大级别来向下探索,要么使用多个堆栈。如果你能以某种方式在你的问题中添加一个导致问题的例子,那也会很有帮助。
private void getAllTextViews(AccessibilityNodeInfo nodeInfo, StringBuilder stringBuilder) {
        if (nodeInfo == null) return;
        if (!TextUtils.isEmpty(nodeInfo.getText())) {
            stringBuilder.append(" " + nodeInfo.getText());
        }
        for (int i = 0; i < nodeInfo.getChildCount(); i++) {
            getAllTextViews(nodeInfo.getChild(i), stringBuilder);
        }
    }