变量被垃圾收集

时间:2011-05-14 06:50:27

标签: android garbage-collection

我有一个正在运行的Android应用程序。一段时间后,当用户通过运行其他东西退出应用程序并返回到我的应用程序时,应用程序中的静态变量似乎已被垃圾收集。

在坚果shell中,我在应用程序启动时保留输入的用户名/密码,并将它们保存在静态变量中,并使用它们与服务器进行通信。我要么在应用程序重新启动时找出它们何时被垃圾收集(以便我将它们重定向到登录视图)或者防止这个类被垃圾收集。想法?

2 个答案:

答案 0 :(得分:5)

实现第二个方案的一种方法是实现自己的继承Application的类,并在清单中指定它。您可以将静态变量放在该类中。 Android将在启动您的进程时创建该类的一个实例,只要该进程还处于活动状态,该实例将处于活动状态。

因此,如果你在该类中有一个简单的布尔值来表示是否已经执行了登录,那么现在你可以通过一种可靠的方式检查是否应该将用户引导到登录活动,或者尝试使用in -memory用户名/密码。

此外,您可以使用标准Android持久性组件(共享首选项文件,SQLLite,AccountManager,OBB,凭据存储等)之一来跨进程重新启动来持久保存凭据。但请注意,这样做会引发一系列关于如何正确保护用户凭据的持久副本的新问题,以防止其他应用程序(特别是root用户)对其进行未经授权的访问。

答案 1 :(得分:2)

我建议不要“阻止​​这个类被垃圾收集”。相反,在框架内按预期工作。

(未涉及用户身份验证或凭据管理的主题......)

Android提供了一些用于存储数据的选项,概述于http://developer.android.com/guide/topics/data/data-storage.html。对于您的情况,使用首选项可能是一个体面,轻量级,易于实现的选项。

另外,请注意,如果应用程序具有使用值的活动,则保留活动成员中的值可能很好地解决问题。如果是这样,那么请注意使用onSaveInstanceState(Bundle)和onRestoreInstanceState(Bundle)可能是有序的。