Java 当应用程序返回内存时,单例不可用
我面临的问题如下:当我启动我的应用程序时,所有的单例都在主活动中初始化,一切都按预期进行。然后,如果我按下home(主页)按钮并快速返回应用程序,一切都正常,我认为这是因为所有内容都在内存中,但如果我去chrome观看几段视频或开始一场游戏并尝试返回应用程序,我会遇到一个例外。我不理解应用程序的这种状态,因为它没有被杀死,但它不在内存中,它试图返回到它在按下home按钮之前的活动,onCreate方法被调用,我收到了在第一个位置调用活动的意图,但单例未初始化,异常发生在这里:Java 当应用程序返回内存时,单例不可用,java,android,singleton,Java,Android,Singleton,我面临的问题如下:当我启动我的应用程序时,所有的单例都在主活动中初始化,一切都按预期进行。然后,如果我按下home(主页)按钮并快速返回应用程序,一切都正常,我认为这是因为所有内容都在内存中,但如果我去chrome观看几段视频或开始一场游戏并尝试返回应用程序,我会遇到一个例外。我不理解应用程序的这种状态,因为它没有被杀死,但它不在内存中,它试图返回到它在按下home按钮之前的活动,onCreate方法被调用,我收到了在第一个位置调用活动的意图,但单例未初始化,异常发生在这里: Tracker
Tracker tracker = GoogleAnalytics.getInstance(this).getDefaultTracker();
tracker.set(Fields.SCREEN_NAME, "My View");
tracker.send(MapBuilder
.createAppView()
.build()
);
我尝试过的一个可能的解决方案就是检查跟踪器,如果它为空,则创建一个新跟踪器并进行设置:
if(tracker == null){
tracker = GoogleAnalytics.getInstance(this).getTracker(trackerId);
GoogleAnalytics.getInstance(this).setDefaultTracker(tracker);
}
但我在另一个单身汉身上得到了另一个例外。我的问题是:当应用程序处于这种状态时,内存中会保留哪些变量?我应该怎么做,当追踪器为空时调用finish?或者尝试主要活动?尝试使用finish()并在If条件下添加Try-catch方法简单地说,Android系统不会确保任何东西永远留在内存中,只要系统需要内存,它就会开始根据优先级清除后台应用程序和服务
- 一种方法是,您可以让单例的getter处理,如果单例中的
变量为null或未初始化,那么您应该初始化它,这可以解决您的问题,并且它将为您的方法添加延迟初始化风格实例
- 另一种方法是,您可以在
中添加一个标志,并在onSaveInstance()
中检查它,然后您就知道这是您的活动第一次启动,还是已从内存中清除并正在重新初始化onCreate()