You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

UI5中调用getRouter().getTargets().display()是否会销毁源视图?

OpenUI5 Target display方法相关问题解答

核心结论

调用oRouter.getTargets().display("%DESIRED_VIEW%")时,触发展示的前一个源视图默认不会被垃圾回收机制自动销毁,该用法未做特殊配置时存在内存泄漏风险。

具体行为说明

  • OpenUI5的Target体系默认启用视图缓存逻辑:只要通过display加载过的视图,会默认保存在路由的视图缓存池中,即便切换到其他目标视图,之前的视图实例也不会被销毁,其绑定的事件监听、模型引用、自定义属性都会完整保留,对应内存不会被GC自动释放。
  • 调用display展示新目标视图时,默认仅会将新视图渲染到Target配置对应的容器聚合中,替换旧视图的DOM节点,旧视图的JS实例依然存活,你仍可通过路由的视图获取接口拿到该实例,它的onExit等销毁生命周期钩子不会被触发。

避免内存泄漏的配置方式

  • 方式1:在manifest.json对应Target的配置项中显式添加 "clearTarget": true、"clearControlAggregation": true 配置,路由展示新目标时会自动销毁容器聚合中之前的视图实例。
  • 方式2:如果是临时展示无需复用的视图,在调用display展示新视图后,手动获取不需要的旧视图实例调用destroy()方法完成销毁,触发内存释放。

内容的提问来源于stack exchange,提问作者Mike

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 20:36:03