前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >遍历 AccessibilityNodeInfo 报 StackOverflowError

遍历 AccessibilityNodeInfo 报 StackOverflowError

作者头像
他叫自己MR.张
发布2019-07-01 17:16:29
9370
发布2019-07-01 17:16:29
举报

如果移动端访问不佳,请使用 ==> Github Pages 版。

在使用 AccessibilityService 遍历包含 WebView 的 AccessibilityNodeInfo 时会在某些情况下必现 StackOverflowError 的错误,导致应用崩溃。

0x00 异常

最近使用 Android 的 AccessibilityService 做一些自动化操作时发现,在部分机器上遍历包含 WebView 页面的 AccessibilityNodeInfo 时,某些页面必定会引起 StackOverflowError 错误,经过一番查证,定位到主要与系统所使用的 Android System WebView 版本有关,属于 WebView 的 Bug。

相关说明可以参考 Android: Infinite loop of FrameLayouts in accessibility tree 的讨论。

查看 Android System WebView 版本(以下2种方法任一均可):

  1. 应用程序
    1. 菜单:显示系统应用程序
    2. 点击列表中的:Android System WebView
    3. 详情页内包含版本
  2. 开发者选项
    1. 开启「开发者选项」
    2. 开发者选项 -> WebView 实现

0x01 解决

方法有2种:

  1. 一个是尝试在 Google Play Store 中升级 Android System WebView 到最新版;
  2. 一个是使用递归遍历 AccessibilityNodeInfo 时限制遍历的最大深度,这个深度根据情况大致在 40~70之间即可,既要基本保证能遍历完正常的 NodeTree 内的 Node,又要不引起 StackOverflowError 导致应用崩溃。

当然,方法2更具有可控性和兼容性,某些情况下我们并不能左右用户手机上 Android System WebView 的版本。

0x02 总结

此类情况发生在特定的 Android System WebView 和 Android 版本上,建议使用了相关功能的应用加上 Bug 上报的功能。

如果有什么建议或者问题可以随时联系我,共同探讨学习:

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019年02月17日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0x00 异常
  • 0x01 解决
  • 0x02 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档