在片段中保存活动实例:是否会导致内存泄漏?

时间:2018-01-02 10:44:00

标签: android memory-leaks

我有ActivityFragment个。从每个片段,我需要调用Activity实现的aMethod()。所以,我做这样的事情:

((MyActivity)getActivity()).aMethod();

我多次引用该活动,所以我决定持有对该活动的引用。创建片段时,我有:

MyActivity act; // this s a fragment's member
//...
act = (MyActivity) getActivity();

我想知道持有该引用是否会导致内存泄漏。

如果是这样,我想到了两个解决方案:

    片段被销毁时
  1. act = null;onDestroy()

  2. 使用WeakReferenceact = new WeakReference((MyActivity) getActivity());

  3. 两者都有效吗?它有意义吗?

2 个答案:

答案 0 :(得分:3)

您甚至不需要持有参考。继续使用

getActivity()

片段生命周期与其活动的生命周期相结合,因此您不必担心它。

如果您仍想存储引用,可以安全地使用您自己说的WeakReference。

这将在需要时使引用可用于垃圾回收。在使用引用之前,只需保持非空的检查。

答案 1 :(得分:2)

没有内存泄漏。

我们正在从可以加载片段的位置获取Activity的实例。

所以你还需要传递Activity或As的实例,你已经进行了转换,并且通过getActivity()是正确的。

但是记住有一件事,只要onPause(),onStop()和onDestroy()在那时调用释放instace的实例,否则它会保留内存并且垃圾收集器不清除它所以在这样的情况/情况下只发生内存泄漏。 / p>