当应用程序返回内存时,单身人士无法使用

时间:2014-07-30 08:59:51

标签: java android singleton

我面临的问题如下:当我启动我的应用程序时,所有单例都在主活动中初始化,一切都按预期工作。然后,如果我按下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);
}

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

2 个答案:

答案 0 :(得分:2)

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

  • 一种方法是你可以让单身人员的getter处理,如果你的单身中的instance变量为null或未初始化,那么你应该初始化它,这可以解决你的问题,它将为您的方法添加一种懒惰的初始化风格。

  • 另一个是您可以在onSaveInstance()中添加一个标记,然后您可以在onCreate()中进行检查,然后您就会知道这是否是您第一次启动活动或是已经从记忆中清除并正在重新初始化。

答案 1 :(得分:0)

尝试使用finish()并在If条件

中添加try catch方法