我有Activity
个Fragment
个。从每个片段,我需要调用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());
两者都有效吗?它有意义吗?
答案 0 :(得分:3)
您甚至不需要持有参考。继续使用
getActivity()
片段生命周期与其活动的生命周期相结合,因此您不必担心它。
如果您仍想存储引用,可以安全地使用您自己说的WeakReference。
这将在需要时使引用可用于垃圾回收。在使用引用之前,只需保持非空的检查。
答案 1 :(得分:2)
没有内存泄漏。
我们正在从可以加载片段的位置获取Activity的实例。
所以你还需要传递Activity或As的实例,你已经进行了转换,并且通过getActivity()是正确的。
但是记住有一件事,只要onPause(),onStop()和onDestroy()在那时调用释放instace的实例,否则它会保留内存并且垃圾收集器不清除它所以在这样的情况/情况下只发生内存泄漏。 / p>