當片段閱讀了,我碰到這部分來到communicating with the activity,其中包含下面的代碼片段:這個Android示例是否可以安全使用,內存泄漏?
@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
保留重啓,含有舊Activity
的參考。 (這是真的嗎?)
但是這種模式可以安全使用setRetainInstance()
設置爲false
?
爲什麼不直接調用((OnArticleSelectedListener)getActivity())。listenerMethod()當你需要它而不是持有對它的引用? – dymmeh
因爲這是Android開發指南中的示例代碼!在碎片分離之後,你可能會得到'NullPoinerException',我想我的問題歸結爲!你能否認爲只要你可以調用回調方法,片段就不會脫離其活動? - 你必須特別注意'AsyncTasks'等。 – Maarten
所以你應該在'onDetach()'中將'mListener'設置回'null'? – Maarten