【发布时间】:2013-12-25 00:22:14
【问题描述】:
在我的 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.getApplication())。
现在的问题是,保留应用程序的静态实例有什么缺点吗?我的意思是,根据我的理解,Application.onCreate() 被调用后(应该只发生一次),MyApplication.getInstance() 永远不应该返回 null。这是真的吗?
Android 上还有什么方法可以多次启动应用程序实例(不杀死旧实例)?如果有,我的静态 instance 变量将在第二个实例声明后指向什么?我猜,因为它们将是不同的进程,每个都指向它自己的应用程序,但我不能确定。
PS:我不是在问重写 Application 类,我已经知道 Dianne Hackborn(Android 框架工程师)说没有必要重写 Application 类,使用 Singletons 代替应该没问题。问题更多是关于应用程序生命周期和保持静态变量。
【问题讨论】:
-
考虑到您要保留的“东西”与上下文无关,它根本不必与
Application类绑定。我会用静态方法制作一种ClassWiring类,它将单例实例返回给你的“东西”。 (将此添加为评论,因为它没有回答您的实际问题)。 -
抱歉刚刚意识到,我也保留(应用程序)上下文相关的东西。编辑了问题。
标签: java android application-lifecycle application-singleton