为了避免内存泄漏,我编写了以下用于活动并主要用于碎片(使用继承)的方法。该方法应该允许我通过调用弱引用而不是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。 –