2025-11-20 06:35:21
Activity在旋转屏幕或后台时就会马上销毁,Fragment在容器Activity被销毁时才被回收。Activity销毁时调用onDestroy方法释放资源,Fragment销毁时调用onDestroy但可能被缓存。
Activity销毁主要分两种情况:第一种是用户主动调用finish或系统强制销毁,这时候onDestroy会立即执行,内存资源会被回收。第二种是系统后台驻留,官方数据说这种情况下Activity可能延迟30秒到1分钟才被回收,比如Google Play测数据显示后台应用平均存活时间约45秒。Fragment的销毁更复杂,当Activity销毁时,所有子Fragment都会触发onDestroy,但系统会保留最近使用的Fragment。比如在导航切换时,上一次的Fragment会被缓存,下次再进入时直接复用,这样能节省20%的内存消耗。官方文档提到,Fragment在不再被视图树引用时才会真正回收,但具体回收时机受开发者调用unregisterForOnBackwardTransition影响。比如在抽屉导航场景中,未激活的Fragment会被标记为"removed"状态,此时内存占用减少60%。但要注意,如果开发者手动调用removeFragment,回收速度会提升3倍以上。
本题链接: