1 关键字

稳定性测试;jscrash;定时器未清理

2 问题描述

设备版本:3.2.1Release

使用wukong工具进行随机测试,在测试过程中com.ohos.settings应用出现jscrash,Error message:Internal error. Can not get delegate,详细信息如下图:

img

3 问题原因

3.1 正常机制

使用wukong工具进行随机测试,不会出现jscrash报错,测试全部通过。

3.2 异常机制

使用wukong工具进行随机测试,在测试过程中com.ohos.settings应用出现jscrash,Error message:Internal error. Can not get delegate。

img

4 解决方案

在页面退出时判断定时器是否被清理,若未被清理,执行清理操作。

img

5 定位过程

1.首先根据通过jscrash问题定界脚本将该jscrash文件进行解析,解析后获取到对应报错应用名:com.ohos.settings 以及问题文件:product/phone/src/main/ets/pages/wifi.ets

2.根据进程号搜寻hilog日志发现报错点在product/phone/src/main/ets/pages/wifi.ets中定时器代码中的JSPromptShowToast弹窗函数,其报错信息解释为Can not get delegate(无法获取委托),由于弹窗需要依赖于当前页面才能成功弹窗。因此我们判断是因为在当前页面退出时,刚好触发了定时器的代码被执行,间接地调用了弹窗组件,弹窗组件无法获取页面信息,弹窗失败,所以抛出了jscrash。

3.那么我们就根据当前分析的结论判断是因为定时器在退出页面之前未被清除才导致后续一系列问题的,所以需要在退出页面之前,把所有定时器清除。

img

img

6 知识分享

使用ets开发应用的过程中,退出页面之前,应将当前页面的所有定时器全部清除。

Logo

社区规范:仅讨论OpenHarmony相关问题。

更多推荐