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

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

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

因为是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
相关问题
lottie动画组件存在严重的内存泄漏
672浏览 • 1回复 待解决
MySQL重复列逻辑处理?
1104浏览 • 1回复 待解决
OceanBase业务案例有哪些?
2649浏览 • 1回复 待解决
长按事件如何重复触发
621浏览 • 1回复 待解决
Xcomponent绘图流程分析
455浏览 • 1回复 待解决
日志打印重复过多,影响定位
423浏览 • 1回复 待解决
Canvas如何触发刷新重复绘制?
328浏览 • 1回复 待解决
分析埋点无法正常上报
390浏览 • 1回复 待解决
首页LazyForEach predict耗时久分析
354浏览 • 1回复 待解决
什么是PolarDB的锁分析
1553浏览 • 1回复 待解决
什么是PolarDB的空间分析
2716浏览 • 1回复 待解决
如何实现组件水波纹动画案例
398浏览 • 1回复 待解决
如何获取内存coredump
484浏览 • 1回复 待解决
TaskPool线程内存如何共享
717浏览 • 1回复 待解决
小熊派智慧物流案例编译出错
4163浏览 • 1回复 待解决
zlib.decompressFile()解压报错如何分析
407浏览 • 1回复 待解决
有没有性能分析工具啊?
299浏览 • 1回复 待解决
"NAPI通信耗时长"导致丢帧分析
152浏览 • 1回复 待解决
HarmonyOS参与者的问题分析
6298浏览 • 4回复 待解决