我正在处理一个大型代码库,在许多地方都可以看到这种类型的代码:
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
有人能解释一下这是不是一种常见的模式吗?如果是,为什么?
简单地说,弱引用是指不够强的引用迫使一个物体留在记忆中。
如果RequestCustomData
对象的寿命比"活动"本身长,则此代码的作者很可能希望避免"活动"上下文的泄漏。
我推荐罗曼·盖伊关于这个话题的帖子,以及几个需要避免的具体案例:
- 内部类和泄漏
- 螺纹和泄漏