i am getting ANR from reports
Broadcast of Intent { act=android.intent.action.PACKAGE_ADDED dat=package:com.google.android.apps.maps flg=0x4000010 cmp=xx.xx.xx/com.microsoft.aad.adal.ApplicationReceiver (has extras) }
Broadcast of Intent { act=android.intent.action.PACKAGE_ADDED dat=package:com.google.android.apps.translate flg=0x4000010 cmp=xx.xx.xx/com.microsoft.aad.adal.ApplicationReceiver (has extras) }
"main" prio=5 tid=1 TimedWaiting | group="main" sCount=1 dsCount=0 obj=0x7527b598 self=0xe9105400 | sysTid=29196 nice=0 cgrp=default sched=0/0 handle=0xebfd2534 | state=S schedstat=( 0 0 0 ) utm=1236 stm=469 core=2 HZ=100 | stack=0xff733000-0xff735000 stackSize=8MB
| held mutexes= at java.lang.Object.wait! (Native method) - waiting on <0x0fa0a2fe> (a java.lang.Object) at java.lang.Object.wait (Object.java:407) at android.view.accessibility.AccessibilityInteractionClient.waitForResultTimedLocked (AccessibilityInteractionClient.java:685) at android.view.accessibility.AccessibilityInteractionClient.getFindAccessibilityNodeInfosResultAndClear (AccessibilityInteractionClient.java:580) - locked <0x0fa0a2fe> (a java.lang.Object) at android.view.accessibility.AccessibilityInteractionClient.findAccessibilityNodeInfoByAccessibilityId (AccessibilityInteractionClient.java:292) at android.view.accessibility.AccessibilityNodeInfo.getChild (AccessibilityNodeInfo.java:851) at xxx.traverseNode (FooAccessibilityService.java:85) at xxx.traverseNode (FooAccessibilityService.java:86) at xxx.traverseNode (FooAccessibilityService.java:86) at xxx.traverseNode (FooAccessibilityService.java:86) at xxx.collectNodes (FooAccessibilityService.java:66) at xxx.onAccessibilityEvent (FooAccessibilityService.java:365) at android.accessibilityservice.AccessibilityService$2.onAccessibilityEvent (AccessibilityService.java:1449) at android.accessibilityservice.AccessibilityService$IAccessibilityServiceClientWrapper.executeMessage (AccessibilityService.java:1585) at com.android.internal.os.HandlerCaller$MyHandler.handleMessage (HandlerCaller.java:37) at android.os.Handler.dispatchMessage (Handler.java:102) at android.os.Looper.loop (Looper.java:154) at android.app.ActivityThread.main (ActivityThread.java:6316) at java.lang.reflect.Method.invoke! (Native method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:872) at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:762)
My code is
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();
}
}
Any idea how to resolve this issue
If an app doesn't respond to the request for the AccessibilityNodeInfo, the request for it from the AccessibilityService will time out and return null. That timeout is set to 5s.
If you make repeated requests from the unresponsive app, you can end up with very long waits.
In the first part of the code shown, the loop will continue trying to traverse nodes even if that fails. That can lead to very long delays.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With