在片段中保存活动实例:是否会导致内存泄漏?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在片段中保存活动实例:是否会导致内存泄漏?相关的知识,希望对你有一定的参考价值。
我有一些Activity
与一些Fragment
s。从每个片段,我需要调用Activity实现的aMethod()
。所以,我做这样的事情:
((MyActivity)getActivity()).aMethod();
我多次引用这个活动,所以我决定引用这个活动。创建片段时,我有:
MyActivity act; // this s a fragment's member
//...
act = (MyActivity) getActivity();
我想知道是否持有该引用可能会导致内存泄漏。
如果是这样,我想到了两个解决方案:
- 碎片被破坏时
act = null;
(onDestroy()
) - 使用
WeakReference
:act = new WeakReference((MyActivity) getActivity());
两者都有效吗?是否有意义?
答案
不,这不是内存泄漏。
我们从可以加载片段的地方获取Activity的实例。
所以你还需要传递Activity或As的实例,你已经通过castA和getActivity()是正确的。
但是记住有一件事,只要onPause(),onStop()和onDestroy()在那时调用释放instace的实例,否则它保存内存和垃圾收集器不清除它所以在这样的情况下/情况只发生内存泄漏。
另一答案
你甚至不需要持有参考。继续使用
getActivity()
片段生命周期与其活动的生命周期相结合,因此您无需担心它。
如果您仍想存储引用,可以安全地使用WeakReference,就像您自己说的那样。
这将使引用在需要时可用于垃圾收集。在使用引用之前,只需保持非null的检查。
以上是关于在片段中保存活动实例:是否会导致内存泄漏?的主要内容,如果未能解决你的问题,请参考以下文章