重复调用onWindowStageCreate内存泄漏案例分析
系统测试,dev分支daily整机测试kingkong测出内存泄漏-26次,最高内存达到2G。经系统稳定性人员协助定位,问题出现在com.example.xxx.meetimeservice ContactUIExtAbility中。
HarmonyOS
赞
收藏 0
回答 1
待解决
相关问题
lottie动画组件存在严重的内存泄漏
672浏览 • 1回复 待解决
如何在线上快速进行heap dump(内存)、应用内存使用量、应用最大内存可用量进行读取和数据分析
536浏览 • 1回复 待解决
MySQL重复列逻辑处理?
1104浏览 • 1回复 待解决
在网络卡了的情况下,有没有可能不断重复地调用接口?
960浏览 • 1回复 待解决
OceanBase业务案例有哪些?
2649浏览 • 1回复 待解决
长按事件如何重复触发
621浏览 • 1回复 待解决
Xcomponent绘图流程分析
455浏览 • 1回复 待解决
指令数问题分析,如何抓取指令数进行问题拆解和分析。
230浏览 • 1回复 待解决
onWindowStageCreate阶段throw error会导致应用卡在展示图标界面
333浏览 • 1回复 待解决
日志打印重复过多,影响定位
423浏览 • 1回复 待解决
如何分析Faultlog日志的内容(JSCrash,CppCrash、Appfreeze等异常的分析步骤)
673浏览 • 1回复 待解决
Canvas如何触发刷新重复绘制?
328浏览 • 1回复 待解决
分析埋点无法正常上报
390浏览 • 1回复 待解决
首页LazyForEach predict耗时久分析
354浏览 • 1回复 待解决
什么是PolarDB的锁分析?
1553浏览 • 1回复 待解决
什么是PolarDB的空间分析?
2716浏览 • 1回复 待解决
如何实现组件水波纹动画案例
398浏览 • 1回复 待解决
如何获取内存coredump
484浏览 • 1回复 待解决
build.gradle中的comileSdkVersion为何重复定义?
7109浏览 • 1回复 已解决
TaskPool线程内存如何共享
717浏览 • 1回复 待解决
小熊派智慧物流案例编译出错
4163浏览 • 1回复 待解决
zlib.decompressFile()解压报错如何分析
407浏览 • 1回复 待解决
有没有性能分析工具啊?
299浏览 • 1回复 待解决
"NAPI通信耗时长"导致丢帧分析
152浏览 • 1回复 待解决
HarmonyOS参与者的问题分析
6298浏览 • 4回复 待解决
因为是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,导致每次进前台窗口都会重新加载。