gpt4 book ai didi

android - 在类里面设置全局上下文是不好的做法吗?

转载 作者:行者123 更新时间:2023-12-02 11:13:53 25 4
gpt4 key购买 nike

如果我在对象的构造函数中传递上下文,如果创建的对象是长期存在的对象或单例,可能会导致内存泄漏。下面的例子。

public class MyObject{
private final Context context;

public MyObject(Context context){
this.context=context;
}
}

从 getApplicationContext() 设置上下文是否更好,因为它返回应用程序类的单例,而不是像这样从引用类的实例中设置上下文?

context =  context.getApplicationContext();  

最佳答案

If I pass a context in the constructor of an object, could that potentially cause a memory leak if the object being created is a long lived object or a singleton

是的。例如,如果该Context是一个Activity,那么一旦Activity被销毁,通常它就会被垃圾收集。但是,如果您从 static 字段引用它,则无法对其进行垃圾收集。除非您更新该字段,否则您将泄漏 Activity 及其引用的所有内容。

Would it be preferable to set the context from getApplicationContext()

是的。正如您所注意到的,Application 上下文是一个单例,它在您的进程期间一直存在。实际上,它是“预先泄露的”。您不能通过让另一个 static 字段指向它来进一步泄漏它。

关于android - 在类里面设置全局上下文是不好的做法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38545650/

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