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

Android 将活动实例保存在片段中:是否会导致内存泄漏?,android,memory-leaks,Android,Memory Leaks,我有一个有一些片段的活动。从每个片段中,我需要调用活动实现的aMethod。所以,我做了这样的事情: ((MyActivity)getActivity()).aMethod(); 我多次引用该活动,因此我决定保留对该活动的引用。创建片段时,我有: MyActivity act; // this s a fragment's member //... act = (MyActivity) getActivity(); 我想知道持有该引用是否会导致内存泄漏 如果是这样,我想到了两种解决方案: a

我有一个有一些片段的活动。从每个片段中,我需要调用活动实现的aMethod。所以,我做了这样的事情:

((MyActivity)getActivity()).aMethod();
我多次引用该活动,因此我决定保留对该活动的引用。创建片段时,我有:

MyActivity act; // this s a fragment's member
//...
act = (MyActivity) getActivity();
我想知道持有该引用是否会导致内存泄漏

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

act=null;当碎片被销毁时

使用WeakReference:act=newweakreferencemyActivity getActivity


两者都有效吗?这有意义吗?

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

getActivity()
片段生命周期与其活动的生命周期相连接,因此您无需担心它

如果你仍然想存储一个引用,一个安全的方法是像你自己说的那样使用WeakReference


这将使引用在需要时可用于垃圾收集。在使用引用之前,只需检查NOTNULL。

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

getActivity()
片段生命周期与其活动的生命周期相连接,因此您无需担心它

如果你仍然想存储一个引用,一个安全的方法是像你自己说的那样使用WeakReference


这将使引用在需要时可用于垃圾收集。不过,在使用引用之前,只需检查NOTNULL。

不,这不是内存泄漏

我们正在获取活动实例,从中可以加载片段

所以您还需要传递Activity的实例,或者根据您已经执行的casting和through getActivity是正确的


但请记住,无论何时调用onPause、onStop和onDestroy来释放Instance of Activity,它都会保留内存,垃圾收集器不会清除内存,因此在这种情况下,只会发生内存泄漏。

不,这不是内存泄漏

我们正在获取活动实例,从中可以加载片段

所以您还需要传递Activity的实例,或者根据您已经执行的casting和through getActivity是正确的


但要记住一件事,每当你停下来,onStop和onDestroy当时调用以释放Instance of Activity,否则它会保留内存,垃圾收集器不会清除它,因此在这种情况下只会发生内存泄漏。

我相信它不会导致内存泄漏。我相信它不会导致内存泄漏。因此,如果我不在该方法中释放对活动的引用,这可能会导致内存泄漏,对吗?您也可以在android监视器视图中看到,也可以使用apk堆来查看。您可以使用上述方法释放活动实例,并在使用ifgetActivity再次恢复到getInstance时重用它=空{///这里是您的强制转换代码。}所以如果我不在该方法中释放对活动的引用,可能会导致内存泄漏,对吗?您也可以在android monitor视图中看到,也可以使用apk堆查看。您可以使用上述方法释放活动实例,并在再次使用ifgetActivity恢复到getInstance时重用它=空{//此处为您的铸造代码。}