gpt4 book ai didi

java - 调用弱引用对象的方法

转载 作者:行者123 更新时间:2023-12-02 10:36:48 25 4
gpt4 key购买 nike

我创建了一个静态变量来保存应用程序上下文,因为我要在类中的其他地方使用它。这个变量是在类的构造函数中分配的,我收到以下错误 - “不要将 Android 上下文类放在静态字段中(对 MyClass 的静态引用,其字段 appContext 指向 Context);这是内存泄漏(并且也会破坏即时运行)[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);
}

在我类(class)的某些地方,我尝试调用 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>

如果不将变量设置为弱引用,如何解决内存泄漏问题?或者,如果我创建了弱引用,我该如何执行它的方法?

最佳答案

您需要调用get() WeakReference<Context>上的方法为了推断 Context值。

WeakReference<Context>没有getPackageManager()方法,这就是您收到该错误的原因。

关于java - 调用弱引用对象的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53229448/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com