3

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

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

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

我了解 Android 操作系统有时可以选择终止应用程序,但允许用户从上次访问的活动返回到该应用程序。有时它只会杀死整个应用程序并迫使用户从头开始。

我一直在寻找解决方案,并且发现了可以应用于我的根活动的“android:alwaysRetainTaskState”属性。显然,每当android决定杀死我的应用程序时,它至少会迫使用户从我可以重新下载数据的第一个活动开始,而不是允许用户从更高级的活动开始,导致他得到空异常。

但是,当我将它应用于我的应用程序时,它不起作用,当我返回我的应用程序时,我是从一个高级活动开始,使用一个空的单例实例。

我还尝试了“android:clearTaskOnLaunch”并且它有效,但这是一个矫枉过正,因为我不希望每次用户返回应用程序时,他都必须重新开始。我希望它只有在 android 决定终止应用程序时才会发生。

有什么我做错了吗?有没有可能有更好的解决方案来保持单身人士的生命?

谢谢!

4

1 回答 1

3

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

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

于 2013-05-18T19:01:18.387 回答