java.lang.IllegalStateException:无法对未密封的实例执行此操作

use*_*081 5 android accessibilityservice

我正在使用无障碍服务在屏幕上找到一个按钮并单击它,但由于某种原因,我收到以下错误:

java.lang.IllegalStateException: Cannot perform this action on a not sealed instance.
    at android.view.accessibility.AccessibilityNodeInfo.enforceSealed(AccessibilityNodeInfo.java:3046)
    at android.view.accessibility.AccessibilityNodeInfo.findAccessibilityNodeInfosByText(AccessibilityNodeInfo.java:1529)
    at com.myapp.adapters.Adapter_Click$11.run(Adapter_Click.java:1874)
    at android.os.Handler.handleCallback(Handler.java:873)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:193)
    at android.app.ActivityThread.main(ActivityThread.java:6718)
    at java.lang.reflect.Method.invoke(Method.java:-2)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
Run Code Online (Sandbox Code Playgroud)

它所指的行是:

List<AccessibilityNodeInfo> list = source.findAccessibilityNodeInfosByText("Accept".toLowerCase());
Run Code Online (Sandbox Code Playgroud)

然后我用它来点击按钮:

if (view.performAction(AccessibilityNodeInfo.ACTION_CLICK)) 
{
  Log.e(TAG, "Button clicked");
}
Run Code Online (Sandbox Code Playgroud)

去年我没有看到任何问题,直到我最近更新到 AndroidX。有没有办法在尝试单击它之前检查它是否是密封的实例?我什至尝试将它包装在 try/catch 中,但它仍然使我的应用程序崩溃。

小智 0

进行密封是为了使节点不可变。当服务使用回收后的节点时,通常会出现此类异常。