为避免内存泄漏,我编写了以下方法,该方法将在活动和主要片段(使用继承)中使用。该方法应该允许我永远不直接调用活动来引用它。
为避免记忆泄漏,我编写了以下方法,将在活动和主要的片段(利用继承)中使用。该方法旨在使我永远不必通过调用activity直接引用它。
如果这样做不安全,我应该返回
我已经在多个片段中使用过它,到目前为止我还没有遇到任何问题。我提出这个问题是因为我在这里读到了这个(here):
为避免记忆泄漏,我编写了以下方法,将在活动和主要的片段(利用继承)中使用。该方法旨在使我永远不必通过调用activity直接引用它。
//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):
到目前为止,我还没有遇到一个被引用的元素超过活动的情况。如果您发现错误或可能存在的错误,请在评论中写下。只要助手的生命周期在活动的生命周期之内,那么就不需要使用
WeakReference
。如果助手可以比Activity
存活更长时间,那么当系统销毁它时,你应该使用WeakReference
来避免在对象图中保留Activity
。
activityWeakReference
不为 null,但activityWeakReference.get()
为 null 时,您的方法可能返回 null。 - Mateus Gondim