在我的 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/