重复调用onWindowStageCreate内存泄漏案例分析 -鸿蒙开发者社区-51CTO.COM

重复调用onWindowStageCreate内存泄漏案例分析

系统测试,dev分支daily整机测试kingkong测出内存泄漏-26次,最高内存达到2G。经系统稳定性人员协助定位,问题出现在com.example.xxx.meetimeservice ContactUIExtAbility中。

HarmonyOS
2024-06-13 11:03:21
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
小小肉蟹

因为是kingkong跑出来的问题,并不能直接明确触发场景,所以最好能先定位出触发场景。

首先,根据故障日志进行分析,可以看出图中这两个时间段内存的涨幅比较大,针对性地去看这段时间的应用日志。

memleak-native-com.example.xxx.meetimeservice:ui-6647-sample.txt

分析了大量内存涨幅比较大时间段的日志,可以看出对应时间段只有亮灭屏、前后台切换的行为(下方日志举例)。当前就基本锁定了场景,本地试试该场景是否能复现。

本地复现场景,使用profile工具查看,符合预期结果,确实是前后台切换导致。

再对切换到前台日志进行分析,原本onWindowStageCreate()并不会在切换到前台时走,当前重复走了onWindowStageCreate()后,导致UIExtensionAbility重新渲染走了onSessionCreate()。

并且根据切换到后台日志可以看出onSessionDestroy()并没有走,这里就分析出内存泄漏的直接原因了。

总结

根据日志分析初步定位场景为畅连从后台切前台,本地验证该场景确实导致内存异常增长。通过snapshot看出后台切换到前台时,有大量内存增长;本地复现该场景查看日志,发现UIExtension的onSessionCreate生命周期重复在走,并且此前创建的session未执行onSessionDestroy,导致内存泄漏。之后分析代码发现在app的onNewWant生命周期中主动触发了onWindowStageCreate,导致每次进前台窗口都会重新加载。

分享
微博
QQ
微信
回复
2024-06-13 21:41:14
相关问题
HarmonyOS 怎么检查内存泄漏
455浏览 • 1回复 待解决
lottie动画组件存在严重的内存泄漏
1305浏览 • 1回复 待解决
MySQL重复列逻辑处理?
2492浏览 • 1回复 待解决
长按事件如何重复触发
1995浏览 • 1回复 待解决
HarmonyOS HAR包被重复打包问题
415浏览 • 1回复 待解决
OceanBase业务案例有哪些?
3638浏览 • 1回复 待解决
HarmonyOS jsbridge能力暴露封装案例
105浏览 • 1回复 待解决
日志打印重复过多,影响定位
829浏览 • 1回复 待解决
HarmonyOS ArkTS接口回调的案例
379浏览 • 1回复 待解决
Canvas如何触发刷新重复绘制?
816浏览 • 1回复 待解决
将字符串重复指定次数
307浏览 • 1回复 待解决