@@ -662,29 +662,31 @@ private void prefetchSiblingsOfRealNode(View current,
662662 ViewGroup parentGroup = (ViewGroup ) parent ;
663663 ChildListForAccessibility children = ChildListForAccessibility .obtain (parentGroup ,
664664 false );
665- final int childCount = children .getChildCount ();
666- for (int i = 0 ; i < childCount ; i ++) {
667- if (outInfos .size () >= MAX_ACCESSIBILITY_NODE_INFO_BATCH_SIZE ) {
668- children .recycle ();
669- return ;
670- }
671- View child = children .getChildAt (i );
672- if (child .getAccessibilityViewId () != current .getAccessibilityViewId ()
673- && child .isDisplayedOnScreen ()) {
674- AccessibilityNodeInfo info = null ;
675- AccessibilityNodeProvider provider = child .getAccessibilityNodeProvider ();
676- if (provider == null ) {
677- info = child .createAccessibilityNodeInfo ();
678- } else {
679- info = provider .createAccessibilityNodeInfo (
680- AccessibilityNodeInfo .UNDEFINED );
665+ try {
666+ final int childCount = children .getChildCount ();
667+ for (int i = 0 ; i < childCount ; i ++) {
668+ if (outInfos .size () >= MAX_ACCESSIBILITY_NODE_INFO_BATCH_SIZE ) {
669+ return ;
681670 }
682- if (info != null ) {
683- outInfos .add (info );
671+ View child = children .getChildAt (i );
672+ if (child .getAccessibilityViewId () != current .getAccessibilityViewId ()
673+ && child .isDisplayedOnScreen ()) {
674+ AccessibilityNodeInfo info = null ;
675+ AccessibilityNodeProvider provider = child .getAccessibilityNodeProvider ();
676+ if (provider == null ) {
677+ info = child .createAccessibilityNodeInfo ();
678+ } else {
679+ info = provider .createAccessibilityNodeInfo (
680+ AccessibilityNodeInfo .UNDEFINED );
681+ }
682+ if (info != null ) {
683+ outInfos .add (info );
684+ }
684685 }
685686 }
687+ } finally {
688+ children .recycle ();
686689 }
687- children .recycle ();
688690 }
689691 }
690692
@@ -697,32 +699,34 @@ private void prefetchDescendantsOfRealNode(View root,
697699 HashMap <View , AccessibilityNodeInfo > addedChildren =
698700 new HashMap <View , AccessibilityNodeInfo >();
699701 ChildListForAccessibility children = ChildListForAccessibility .obtain (rootGroup , false );
700- final int childCount = children .getChildCount ();
701- for (int i = 0 ; i < childCount ; i ++) {
702- if (outInfos .size () >= MAX_ACCESSIBILITY_NODE_INFO_BATCH_SIZE ) {
703- children .recycle ();
704- return ;
705- }
706- View child = children .getChildAt (i );
707- if (child .isDisplayedOnScreen ()) {
708- AccessibilityNodeProvider provider = child .getAccessibilityNodeProvider ();
709- if (provider == null ) {
710- AccessibilityNodeInfo info = child .createAccessibilityNodeInfo ();
711- if (info != null ) {
712- outInfos .add (info );
713- addedChildren .put (child , null );
714- }
715- } else {
716- AccessibilityNodeInfo info = provider .createAccessibilityNodeInfo (
717- AccessibilityNodeInfo .UNDEFINED );
718- if (info != null ) {
719- outInfos .add (info );
720- addedChildren .put (child , info );
702+ try {
703+ final int childCount = children .getChildCount ();
704+ for (int i = 0 ; i < childCount ; i ++) {
705+ if (outInfos .size () >= MAX_ACCESSIBILITY_NODE_INFO_BATCH_SIZE ) {
706+ return ;
707+ }
708+ View child = children .getChildAt (i );
709+ if (child .isDisplayedOnScreen ()) {
710+ AccessibilityNodeProvider provider = child .getAccessibilityNodeProvider ();
711+ if (provider == null ) {
712+ AccessibilityNodeInfo info = child .createAccessibilityNodeInfo ();
713+ if (info != null ) {
714+ outInfos .add (info );
715+ addedChildren .put (child , null );
716+ }
717+ } else {
718+ AccessibilityNodeInfo info = provider .createAccessibilityNodeInfo (
719+ AccessibilityNodeInfo .UNDEFINED );
720+ if (info != null ) {
721+ outInfos .add (info );
722+ addedChildren .put (child , info );
723+ }
721724 }
722725 }
723726 }
727+ } finally {
728+ children .recycle ();
724729 }
725- children .recycle ();
726730 if (outInfos .size () < MAX_ACCESSIBILITY_NODE_INFO_BATCH_SIZE ) {
727731 for (Map .Entry <View , AccessibilityNodeInfo > entry : addedChildren .entrySet ()) {
728732 View addedChild = entry .getKey ();
0 commit comments