gpt4 book ai didi

Android AccessibilityNodeInfo refresh() 和 recycle()

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:07:38 62 4
gpt4 key购买 nike

我已经阅读了 https://developer.android.com/reference/android/view/accessibility/AccessibilityNodeInfo.html 中的 android 文档

我不明白文档中关于 recycle() 和 refresh() 方法的描述。

<强>1。 recycle() - 返回一个实例以供重复使用。

  • 实例返回到哪里了?
  • 在哪种情况下将重用此实例?
  • AccessibilityNodeInfo 可能包含子节点,当我的代码导航到每个节点时我需要调用 recycle() 还是只在根节点调用 recycle 方法?

<强>2。 refresh() - 用它代表的 View 的最新状态刷新此信息

  • 我想当 onAccessibilityEvent() 方法被调用时,AccessibilityEvent 对象应该包含最新的状态?
  • AccessibilityNodeInfo 可能包含子节点,我需要在我的代码导航到每个节点时调用 refresh() 还是只在根节点调用 refresh 方法?

最佳答案

Android 辅助功能 API 使用 AccessibilityNodeInfo 节点池。这样,遍历大型树就不会创建许多会减慢垃圾收集器速度的对象。换句话说,当你 recycle() 一个节点时,你可能稍后(例如,在下一个事件上,或者在同一棵树上迭代时)再次收到完全相同的节点对象,但填充了完全不同的细节。这就是为什么不要保留对已回收节点的引用(例如尝试将它们与其他节点进行比较)的原因。

当你获取子节点时,你必须回收每个子节点。当你没有得到它们时,你不需要回收它们。您可以在回收父级之前回收子级,或者反过来,具体取决于您需要访问对象的时间。

当您收到一个节点时,它包含最新的状态。但是当您对其执行操作(例如单击或滚动)时,节点或其他节点的状态可能会发生变化。如果你想实时看到这些变化(而不仅仅是当你收到下一个事件时),你必须刷新()节点(或者你可以刷新()根并尝试获取节点的新副本从根)

当你新鲜获取子节点时,你不需要刷新它们(它们已经是新鲜的)。您只需要刷新之前获得的节点(在与它们或其他节点进行一些交互之前)。

关于Android AccessibilityNodeInfo refresh() 和 recycle(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44921893/

62 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com