【发布时间】:2017-08-22 17:07:17
【问题描述】:
我在我的 Android 应用中使用了一些单例。从我的onCreate() 中的GlobalApp (extends Application) 类中,它们被初始化如下:
public class GlobalApp extends Application{
@Override
public void onCreate() {
super.onCreate();
DatabaseHelper databaseHelper = new DatabaseHelper(getApplicationContext());
MySingleton.init(databaseHelper);
}
}
还有单例:
public class MySingleton{
static MySingleton instance;
DatabaseHelper databaseHelper;
public static void init(DatabaseHelper databaseHelper){
instance = new MySingleton(databaseHelper);
}
}
我收到我的应用程序崩溃,这清楚地表明该实例是 null 有时在我的应用程序运行时。最奇怪的是:这些崩溃只发生在三星 Galaxy S5 上!
我的理解是
我的
application类的onCreate()方法保证在我的应用启动时被调用Singleton 上的实例永远不会变为 null,除非应用程序将完全重新启动(在这种情况下,它应该由我的
application类重新创建)。
这是怎么回事?
PS:我知道 Singletons 有点不受欢迎,扩展 application 类也不是每个人都推荐的,但这不是重点。
编辑: 只是为了澄清,代码在 99% 的时间里都能正常工作。问题不在于如何实现单例模式,而是我(或任何)应用程序的生命周期如何导致单例的instance 在application 的@ 中创建时变为null 987654334@.
【问题讨论】:
-
您需要在init方法中为
databaseHelper提供参考。喜欢this.databaseHelper = databaseHelper; -
能否请您发布实际代码?因为上述尝试在静态上下文 (
init) 中访问非静态字段 (instance),这是一个编译时错误。 -
@dhke 是的,我编辑了那个。
-
您想要应用程序实例吗? CustomApp.getInstance() 这样的???
-
@NullByte 你真的读过这个问题吗?