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

Fragment销毁(调用onDestroy())时其内部对象是否会被销毁?

Fragment销毁时内部对象的生命周期问题

嘿,其实你这两个问题核心是同一个点,我来给你掰扯明白~

首先得理清Fragment的生命周期逻辑:当Fragment的onDestroy()方法被调用时,Fragment的实例本身并没有被销毁,它只是走到了生命周期的销毁阶段(紧接着会触发onDetach(),之后才会真正从FragmentManager中解绑)。这时候Fragment对象还存留在内存里,直到没有任何引用指向它,才会被GC(垃圾回收器)处理回收。

那内部对象的情况得分场景看:

  • 如果是Fragment的普通成员变量(比如你定义的自定义工具类实例、数据模型对象等):只要Fragment实例还在内存中,这些对象就会一直存在。只有当Fragment实例被GC回收的时候,这些成员变量才会被标记为可回收——当然,前提是没有其他地方(比如Activity、静态变量)持有它们的强引用,如果有外部强引用,那即使Fragment没了,这些对象也不会被销毁。
  • 如果是和View绑定的对象(比如在onCreateView里创建的TextView、RecyclerView实例):这类对象会在onDestroyView()方法调用时就被销毁(因为View会从视图树中移除,失去引用后会被GC),这个时间点其实是在onDestroy()之前的。

举个实际例子:比如你把Fragment添加到Activity中,之后Activity被销毁,Fragment的onDestroy()会被调用,接着Fragment实例会被解绑,当没有其他引用时,Fragment本身和它的内部成员对象都会被GC回收。但如果你的Fragment内部有个静态成员对象,那这个对象会一直驻留内存,直到APP进程结束。

说白了,核心逻辑就是:Fragment的onDestroy()方法调用≠Fragment实例被销毁,内部对象的销毁与否,取决于它们是否还有有效的强引用,以及Fragment实例本身是否被GC回收。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:35:46