gpt4 book ai didi

java - 重写 Application 类并通过静态变量访问它是否安全?

转载 作者:行者123 更新时间:2023-11-29 21:20:45 24 4
gpt4 key购买 nike

在我的 android 应用程序中,我重写了 Application 类,如下所示。

public class MyApplication extends Application {

private static MyApplication instance = null;

@Override
public void onCreate() {
super.onCreate();
instance = this;
}

public static MyApplication getInstance(){
return instance;
}
}

我这样做是为了在配置更改之间保持我的 applicationcontext releted stuf(比如我用 applicationcontext 创建并在整个应用程序上使用的数据库连接)和访问应用程序实例而不需要 Activity 对象(Activity.getApplication( )).

现在的问题是,保留应用程序的静态实例是否有任何缺点?我的意思是,根据我的理解,在调用 Application.onCreate() 之后(应该只发生一次),MyApplication.getInstance() 永远不会返回 null。这是真的吗?

在 Android 上还有什么方法可以多次启动 Application 实例(而不杀死旧的)?如果有,我的静态 instance 变量在第二个实例声明后将指向什么?我猜,因为它们将是不同的进程,每个都指向它自己的应用程序,但我不能确定。

PS:我不是在问重写 Application 类,我已经知道 Dianne Hackborn(一位 Android 框架工程师)说没有必要重写 Application 类,使用 Singletons 应该没问题。问题更多是关于应用程序生命周期和保持静态变量。

最佳答案

简短的回答是,是的,它是安全的。

在应用程序中的任何其他组件启动之前,应用程序类被加载并调用 onCreate(),因此在应用程序的每个组件(Activity、Service、Database 等)中,您都可以得到保证有一个实例。

考虑到您在整个应用程序中都在使用此静态,就内存泄漏而言,另一种安全类型也很好。唯一要记住的是,只要应用程序进程在运行,静态就会在内存中。

关于java - 重写 Application 类并通过静态变量访问它是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20768058/

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