Android 弱引用
Android WeakReference
我有一个 activity 我必须从一个地方触发以放置一个自定义弹出对话框,它也是一个单例
从我的 activity 打开弹出窗口:
ScheduleDialog.getInstance().refreshContent(new WeakReference<Context>(this), new WeakReference<ScheduleDialog.interface>(this));
什么最好?
1) 创建 2 个本地引用(在 ScheduleDialog 中),例如:
Context mContext = nContext.get();
2) 将两者都保留为弱引用,仅在我需要时使用:
nContext.get();
这与泄漏有关error/warnings
谢谢
如果我看到你的代码,你在 Context nContext
变量中获得弱引用值后再次创建强引用。因此,如果你想实现弱引用概念,需要遵循以下过程:-
定义全局class变量:-
private final WeakReference< Context > nContext;
通过从另一个区域传递给全局变量设置值
nContext = new WeakReference<Context>(nContext);
然后
if (nContext.get() != null)
// code
}
https://medium.com/google-developer-experts/weakreference-in-android-dd1e66b9be9d
您必须将它们保留为弱引用,否则垃圾收集器会发现存在对该对象的强引用而不会收集它们,从而导致您提到的泄漏。
我有一个 activity 我必须从一个地方触发以放置一个自定义弹出对话框,它也是一个单例
从我的 activity 打开弹出窗口:
ScheduleDialog.getInstance().refreshContent(new WeakReference<Context>(this), new WeakReference<ScheduleDialog.interface>(this));
什么最好? 1) 创建 2 个本地引用(在 ScheduleDialog 中),例如:
Context mContext = nContext.get();
2) 将两者都保留为弱引用,仅在我需要时使用:
nContext.get();
这与泄漏有关error/warnings
谢谢
如果我看到你的代码,你在 Context nContext
变量中获得弱引用值后再次创建强引用。因此,如果你想实现弱引用概念,需要遵循以下过程:-
定义全局class变量:-
private final WeakReference< Context > nContext;
通过从另一个区域传递给全局变量设置值
nContext = new WeakReference<Context>(nContext);
然后
if (nContext.get() != null)
// code
}
https://medium.com/google-developer-experts/weakreference-in-android-dd1e66b9be9d
您必须将它们保留为弱引用,否则垃圾收集器会发现存在对该对象的强引用而不会收集它们,从而导致您提到的泄漏。