alwaysRetainTaskState无法按预期工作。 Singleton类正在失去其状态

时间:2012-05-25 16:52:38

标签: android android-activity android-lifecycle

我的应用程序第一次运行时,在root活动上,用户需要选择某些选项,以确定从数据库为他下载哪些数据。

一旦他选择了该选项,数据就会下载并保存在单个类中,只要应用程序正在运行,该类就应该保存该数据。 (即使在后台)

我的问题是,有时用户退出我的应用程序一段时间后(使用主页按钮),Android显然会杀死我的应用程序中的一些活动,并以某种方式使用它们,它会重置重要的单例类。一旦我尝试访问应该保留在单例上的数据,导致我的应用程序接收各种空引用异常。

据我所知,Android操作系统有时会选择杀死某个应用程序,但允许用户从上次访问过的活动中返回该应用程序。有时它会杀死整个应用程序并迫使用户从头开始。

我一直在寻找解决方案,我发现了可以应用于我的root活动的“android:alwaysRetainTaskState”属性。显然,每当android决定杀死我的应用程序时,它至少会强制用户从我可以重新下载数据的第一个活动开始,而不是让用户开始更高级的活动,导致他获得null例外。

然而,当我在我的应用程序上应用它时,它不起作用,当我返回到我的应用程序时,我从高级活动开始,有一个空的单例实例。

我也尝试了“android:clearTaskOnLaunch”并且它有效,但它有点过分,因为我不希望每次用户返回应用程序时,他都必须重新开始。我希望它只在android决定杀死应用程序时才会发生。

我有什么问题吗?是否有可能有更好的解决方案让单身人士活着?

谢谢!

1 个答案:

答案 0 :(得分:3)

不。没有更好的解决方案。这是它的工作原理。 Android可以随时终止应用程序的进程(只要它在后台)。您可以将数据保存在单个数据库中,但Android始终可能会终止您的进程。当用户返回到您的应用程序时,Android将创建一个新进程,然后创建用户正在恢复的活动的新实例。您需要在所有活动的onCreate()中放置代码,以识别您的单身人员已经消失,然后执行适当的操作(重定向到应用程序的根活动或重新初始化您的单身人士。

很容易判断您的进程是否已被杀死并重新创建。只需将static boolean变量添加到您初始化时设置为true的单例中。在所有活动的onCreate()中,检查该变量的状态,如果变量为false,则执行一些智能操作。