【发布时间】:2018-11-09 16:15:40
【问题描述】:
我创建了一个静态变量来保存应用程序上下文,因为我打算在课堂上的其他地方使用它。该变量在类的构造函数中被分配,我收到以下错误 - “不要将 Android 上下文类放在静态字段中(对 MyClass 的静态引用,其中的字段 appContext 指向 Context);这是内存泄漏(和也会破坏 Instant Run) [StaticFieldLeak]"
下面是 MyClass 中的代码:
private static Context appContext;
public MyClass(Context context) {
appContext = context;
}
为了解决这个问题,我想将 appContext 作为一个弱引用变量。但是我无法对该变量调用任何方法,因为它的引用很弱。以下是我尝试在弱对象上调用方法时得到的更新代码和错误。
更新代码:
private final WeakReference<Context> appContext;
public MyClass(Context context) {
appContext = new WeakReference<Context>(context);
}
在我班上的某些地方我试图调用 appContext.getPackageManager() 和 appContext.getString() 并且我看到以下错误:
error: cannot find symbol
symbol: method getPackageManager()
location: variable appContext of type WeakReference<Context>
error: cannot find symbol
symbol: method getString(int)
location: variable appContext of type WeakReference<Context>
如果不将变量设为弱引用,如何解决内存泄漏问题?或者如果我做了一个弱引用,我该如何对其执行方法?
【问题讨论】:
标签: java android weak-references