【发布时间】:2013-12-18 23:07:57
【问题描述】:
在阅读 Fragments 时,我在 communicating with the activity 上看到了这一部分,其中包含以下 sn-p 代码:
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
try {
mListener = (OnArticleSelectedListener) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString() + " must implement OnArticleSelectedListener");
}
}
不知何故,我觉得片段不应该包含对其Activity 的引用,但我真的不知道这种直觉来自哪里。
我觉得当setRetainInstance() 设置为true 时,上面的代码会导致内存泄漏,因为Activity 可能会在方向更改时重新启动,而Fragment 被保留,包含对旧@ 的引用987654328@。 (这是真的吗?)
但是在将setRetainInstance() 设置为false 时使用此模式是否安全?
【问题讨论】:
-
为什么不在需要时调用 ((OnArticleSelectedListener)getActivity()).listenerMethod() 而不是持有对它的引用?
-
因为这是 Android 开发指南中的示例代码!在 Fragment 分离后,您可能会得到一个
NullPoinerException,我想我的问题归结为!只要您可以调用回调方法,您是否可以假设 Fragment 不会与其活动分离? --AsyncTasks之类的要特别小心。 -
那么您是否应该在
onDetach()中将mListener设置回null? -
你在哪里调用你的回调?
-
我的应用程序,特别是在
onClick侦听器中的ListView项目,但我的问题是一般性的。
标签: android memory-leaks android-fragments