我正在开发一个大型代码库,并在很多地方看到这种类型的代码:
public static class RequestCustomData implements View.OnClickListener {
WeakReference<MainActivity> mainActivity;
public RequestCustomData(MainActivity activity) {
mainActivity = new WeakReference<>(activity);
}
@Override
public void onClick(View view) {
MainActivity activity = mainActivity.get();
activity.requestCustomData(true, null);
}
}
我有点困惑为什么这个用的是这么多地方?我看了一下这个文档,但它没有说清楚为什么这类代码在我正在使用的应用程序上如此频繁地使用
https://community.oracle.com/blogs/enicholas/2006/05/04/understanding-weak-references
如果这是一种常见模式,任何人都可以解释我吗?如果是这样,为什么?
答案 0 :(得分:24)
简单地说,弱引用是一个不够强大的参考 强迫对象留在内存中。
如果RequestCustomData
对象可能比活动本身更长,则此代码的作者很可能希望避免泄露Activity上下文。
我建议Romain Guy's post on this topic以及一些特殊情况要避免: