1

在我的 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应该没问题。问题更多是关于应用程序生命周期和保持静态变量。

4

2 回答 2

1

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

在应用程序中的任何其他组件启动之前,应用程序类被加载并被onCreate()调用,因此在应用程序的每个组件(活动、服务、数据库等)中,您都保证有一个实例。

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

于 2013-12-25T00:49:45.487 回答
1

它是安全的,只要您的应用程序从不在多个进程中运行。每个进程的应用程序有严格的一对一比例。因此,2x 进程意味着 2x 应用程序实例。

于 2016-07-28T20:24:12.217 回答