Android中的静态变量和低内存 - 几个问题

时间:2011-10-14 06:30:21

标签: android variables memory static

在我的应用中,我使用静态变量来保存当前用户ID。有一个很难重现这个用户ID的错误就是消失了。虽然它可能与应用程序加载期间如何设置此变量的错误有关(我仍然无法在受控环境中可靠地重现这种情况,所以我不确定究竟发生了什么),我正在开始认为这与从静态变量回收内存的方式有关(我以前没有考虑过)。

那么,我的静态变量何时才会消失?

  • 据我了解,如果操作系统报告内存不足,静态内存可以回收 - 是否可以在应用程序处于前台时发生?还是只有背景?
  • 在没有内存不足的情况下,是否有任何可能的方法可以回收静态内存?我想有时变量会在没有应用程序甚至进入后台的情况下消失,我不确定是否会发生任何低内存事件(AFAIK低内存是指整个操作系统,而不是应用程序的内存)
  • 模拟操作系统回收的静态变量以查看应用程序的行为并随后修复错误的好方法是什么?

任何能让我的理解更加清晰的事情都将受到赞赏。

谢谢。

2 个答案:

答案 0 :(得分:1)

这是超级,超级老的问题,但我正在撰写一篇博文并提到看到这一点。我不知道你是否还在使用这个应用程序(可疑),或者如果你仍然看到这个问题(也有疑问)。我的猜测是你在应用程序启动的Activity中设置了这些静态。当然,如果您的应用程序关闭,然后重新启动,您将无法完成该活动。

延迟加载静态或在自定义Application对象中初始化它们通常会解决这个问题。

我已经对“低记忆中移除的静力学”这个想法进行了大量的研究,基本的答案是它没有发生。如初。

答案 1 :(得分:0)

我建议您不要使用静态变量来保存当前用户ID,因为静态变量不是存储数据的最佳方式之一(我假设userID作为数据保留在应用的每个会话中,除了当用户注销时。)

最简单的方法是使用共享首选项。查看Android Data Storage,了解在Android中存储数据的最佳(实践)方式。

根据您的需要,我邀请您继续SharedPreferences。没有更多问题,您甚至不需要模拟操作系统回收的任何变量。