爲了避免內存泄漏,我編寫了以下用於活動並主要用於碎片(使用繼承)的方法。該方法應該允許我通過調用弱引用而不是getActivity()(Android避免內存泄漏)?
//this or getActivity()
方法不會直接引用活動:
private WeakReference<BaseActivity> activityWeakReference = null;
public BaseActivity getActivityFromWeakReference(){
activityWeakReference = activityWeakReference == null ?
new WeakReference<BaseActivity>((BaseActivity)getActivity()) :
activityWeakReference;
return activityWeakReference.get();
}
調用此方法getActivityFromWeakReference()
而不是getActivity()
安全根據內存泄漏的威脅?
如果這樣做不安全,我應該退回activityWeakReference
並改爲調用它的get()
方法,以確保安全嗎?
我一直在使用它在多個片段,到目前爲止我還沒有任何問題。我問這個問題,因爲我讀這個(here):
只要幫手的壽命是
Activity
的生命週期內,那麼就沒有必要使用WeakReference
。如果助手 的壽命可能比Activity
長,那麼當系統 銷燬它時,應該使用WeakReference
以避免將Activity
保留在對象圖中。
到目前爲止,我還沒有面對一個被引用的元素超出了活動的情況。請大家如果你發現一個錯誤或可能的只是寫在評論中。
請注意,當'activityWeakReference'不爲null,但activityWeakReference.get()'爲時,您的方法可能會返回null。 –
@Mateus Gondim,感謝您的輸入,我在使用之前已經檢查過null。 –