Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/199.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 正在垃圾收集的变量_Android_Garbage Collection - Fatal编程技术网

Android 正在垃圾收集的变量

Android 正在垃圾收集的变量,android,garbage-collection,Android,Garbage Collection,我有一个正在运行的android应用程序。过了一段时间,当用户通过运行其他程序退出应用程序并返回到我的应用程序时,应用程序中的静态变量似乎已被垃圾收集 简而言之,我在应用程序启动时保留输入的用户名/密码,并将它们保存在一个静态变量中,用于与服务器通信。我要么需要知道它们是在应用程序重新启动时被垃圾收集的(以便我将它们重定向到登录视图),要么防止此类被垃圾收集。想法?我建议不要试图“阻止此类被垃圾收集”。相反,应该按照预期在框架内工作 (不涉及用户身份验证或凭据管理的主题…) Android提供了

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

简而言之,我在应用程序启动时保留输入的用户名/密码,并将它们保存在一个静态变量中,用于与服务器通信。我要么需要知道它们是在应用程序重新启动时被垃圾收集的(以便我将它们重定向到登录视图),要么防止此类被垃圾收集。想法?

我建议不要试图“阻止此类被垃圾收集”。相反,应该按照预期在框架内工作

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

Android提供了一些存储数据的选项,如中所述。对于您的情况,使用首选项可能是一个体面、轻量级、易于实现的选项


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

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

因此,如果该类中有一个简单的布尔值表示是否执行了登录,那么现在就有了一种可靠的方法,可以随时检查是否应该将用户引导到登录活动,或者尝试使用内存中的用户名/密码


此外,您可以使用一个标准的Android持久性组件(共享首选项文件、SQLLite、AccountManager、OBB、凭据存储等)在进程重启期间持久化凭据。但是请注意,这样做会引发一系列全新的问题,即如何正确保护用户凭据的持久副本,以防止其他应用程序(尤其是在根手机上)对其进行未经授权的访问。

严格来说,垃圾收集的是对象,而不是变量。当您说它们已被垃圾收集时,您的意思是它们的值已变为null吗?您可以在Resume上检查变量是否设置为null,如果设置为null,则需要再次请求凭据。否则,下面的答案提供了一些很好的解决方案。@davmac是的,我的意思也是obejcts:)即使在applciatino内部,静态变量也被垃圾收集