java – 当应用程序返回内存时,Singletons不可用

我面临的问题如下:当我启动我的应用程序时,所有单例都在主活动中初始化,一切都按预期工作.然后,如果我按下home buttom并快速回到应用程序一切正常,我认为这是因为一切都在内存中,但如果我去看看几个视频或开始游戏并尝试回到我的应用程序我得到一个例外.我不明白应用程序的这种状态,因为它没有被杀死,但它不在内存中,它试图回到按下home buttom之前的活动,onCreate方法被调用,我收到调用活动的Intent首先,但单例未初始化,此处发生异常:

 Tracker tracker = GoogleAnalytics.getInstance(this).getDefaultTracker();
 tracker.set(Fields.SCREEN_NAME, "My View");
 tracker.send(MapBuilder
                    .createAppView()
                    .build()
    );

我尝试的一个可能的解决方案是检查跟踪器,如果它为null,则创建一个新的并设置它:

if(tracker == null){
        tracker = GoogleAnalytics.getInstance(this).getTracker(trackerId);
        GoogleAnalytics.getInstance(this).setDefaultTracker(tracker);
}

但我在另一个单身人士中得到了另一个例外.我的问题是:当应用处于此状态时,内存中保留了哪些变量?我该怎么办,也许在跟踪器为空时调用完成?或意图主要活动?

最佳答案 简单地说,Android系统无法确保永久保留在内存中的任何内容,只要系统需要内存,它就会根据优先级开始清除后台应用程序和服务.

>一种方法是你可以使单例的getter处理,如果你的singleton中的实例变量为null或未初始化,那么你应该初始化它,这可以解决你的问题,它会为你的方法添加一个懒惰的初始化风格.
>另一个是你可以在onSaveInstance()中添加一个标志,你可以在onCreate()中检查它,然后你就会知道这是你的活动第一次启动还是已经从内存中清除并正在重新初始化.

点赞