2010-11-09 66 views
10

我使用我的Android应用程序的应用程序上下文作为我的应用程序的“当前状态”信息的存储区域。Android应用程序上下文是否被破坏?

我发现在这个领域,有些情况下这些信息会在某些人的设备上消失,导致各种NullPointerException异常,因为我希望当应用程序恢复并开始重建必要的活动时,数据就在那里。

这通常发生在用户点击“Home”,执行其他操作时,最终回到应用程序 - 它试图回到以前的位置,但应用程序Context已经神秘地丢失了之前保存的所有内容状态信息(在我的情况下,一些整数和一些字符串)。

我知道这是一个非常模糊的问题,但是有没有任何情况(除了用户使用“back”完全退出应用程序)应用程序上下文被完全销毁,即使应用程序未终止?

有更好的方法来维护持久状态信息吗?

回答

4

是的,如果用户离开应用程序一段时间,应用程序可能会被终止并重新启动。您可能需要阅读有关processes and lifecycles的此部分。

您应该找到一个合适的位置将状态保存到持久存储区。如果只包含一些整数和字符串,那么当它们改变时将它们保存为共享首选项应该非常简单。请参阅data storage - shared preferences

+0

我想的很多。有什么具体的,我可以做*迫使*这种情况下(我的应用程序被杀害),所以我可以重现它?它显然在现场发生了很多,但我从未能在本地Nexus One上重现过它。在这种情况下onTerminate()然后调用应用程序进程? – user435210 2010-11-09 16:52:16

+0

@ user435210 1.查看包含应用程序生命周期的页面 - 它解释了为管理应用程序生命周期所需了解的几乎所有内容。 2.您可以通过进入'设置/应用程序/管理应用程序/您的应用程序'或通过使用Android市场上可下载的任何应用程序来杀死您的应用程序。 – 2010-11-09 16:59:43

+1

如果你想以“友好”的方式重现它(不是强制杀死),我会打回家,然后启动你可以在系统上找到的每个应用程序,这样Android就会被迫关闭你的系统。正如它在文档中指出的那样,onTerminate可能会被调用,但这不是保证。举例来说,如果您的应用程序因杀死所有应用程序应用程序而关闭,它很可能不会被调用。 – 2010-11-09 17:26:40