重复调用onWindowStageCreate内存泄漏案例分析
系统测试,dev分支daily整机测试kingkong测出内存泄漏-26次,最高内存达到2G。经系统稳定性人员协助定位,问题出现在com.example.xxx.meetimeservice ContactUIExtAbility中。
HarmonyOS
赞
收藏 0
回答 1
待解决
相关问题
HarmonyOS 如何获取内存快照,分析内存泄漏问题?
489浏览 • 1回复 待解决
#鸿蒙通关秘籍#怎样通过内存分析器检测内存泄漏或抖动现象?
632浏览 • 1回复 待解决
HarmonyOS 怎么检查内存泄漏
859浏览 • 1回复 待解决
HarmonyOS 内存泄漏检测
547浏览 • 1回复 待解决
lottie动画组件存在严重的内存泄漏
2055浏览 • 1回复 待解决
HiLog打印日志(ArkTS) 打印日志有内存泄漏
1136浏览 • 1回复 待解决
HarmonyOS eventHub和Emitter是否会造成内存泄漏
624浏览 • 1回复 待解决
如何处理鸿蒙应用中的内存泄漏问题?
655浏览 • 0回复 待解决
HarmonyOS ndk开发如何检测内存泄漏,ASAN并不能检测内存泄漏,有其他推荐第三方工具吗?
530浏览 • 1回复 待解决
如何利用HarmonyOS NEXT的内存管理机制来减少内存泄漏和提高内存使用效率?
983浏览 • 0回复 待解决
HarmonyOS 在onWindowStageCreate调用requestEnableNotification报错 {"code":1600001} message is Internal error
514浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何正确释放JSVM环境以避免内存泄漏?
582浏览 • 1回复 待解决
A持有B,B引用A的场景如何处理才能避免内存泄漏
745浏览 • 1回复 待解决
HarmonyOS RelationalStore的事件订阅是否需要考虑注销订阅,避免内存泄漏
253浏览 • 1回复 待解决
profiler内存泄露分析疑问:SyntheticRoot代表什么?
619浏览 • 1回复 待解决
#鸿蒙学习大百科#如何分析内存问题?
631浏览 • 1回复 待解决
HarmonyOS onWindowStageCreate(windowStage)中报错
302浏览 • 1回复 待解决
HarmonyOS requestModalUIExtension 接口拉起UIEXtensionAbility,会调用onWindowStageCreate生命周期函数吗
169浏览 • 1回复 待解决
如何避免因生命周期管理不当而导致的内存泄漏和应用崩溃?
822浏览 • 0回复 待解决
#鸿蒙通关秘籍#鸿蒙开发中如何避免线程间数据传递引发的内存泄漏?
579浏览 • 1回复 待解决
在EntryAbility 类中的onWindowStageCreate()方法中调用px2vp() api 不生效
648浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何使用N-API延长对象的生命周期避免内存泄漏?
465浏览 • 1回复 待解决
如何在线上快速进行heap dump(内存)、应用内存使用量、应用最大内存可用量进行读取和数据分析
2513浏览 • 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,导致每次进前台窗口都会重新加载。