1

当应用程序进入后台并稍后恢复到活动时,是否有可能在另一个活动中设置的静态类变量可能已被垃圾收集器重置并将值设置为零?

我在我的主要活动中使用了几个公共静态 int 变量,并将它们用作各种其他活动中的全局变量。我在 Android Market 的开发人员控制台中收到了崩溃报告,我能找到的唯一解释是应用程序恢复到使用另一个类中公共静态 int 变量的值的 Activity,但该值有(神秘?)变为零。我知道当应用程序第一次启动时它被设置为其他东西。这是可能吗?

如果我的怀疑是正确的,那么在将应用程序置于后台时保留全局变量值的推荐方法是什么?将它们保存在 OnPause() 中的 SharedPreferences 中,还是使用 onSaveInstanceState 或其他方法?

4

3 回答 3

4

当应用程序进入后台并稍后恢复到活动时,是否有可能在另一个活动中设置的静态类变量可能已被垃圾收集器重置并将值设置为零?

它不会被“垃圾收集器重置”。但是,该进程可能已被 Android 终止,以便为其他应用程序释放内存。

将应用程序置于后台时,推荐的保留全局变量值的方法是什么?

静态数据成员应该只是一个缓存。无论发生什么(例如,进程被终止),您想要保留的数据需要进入某个持久性存储,例如平面文件、SharedPreferences. 或数据库。onPause()可能是安排保留该数据的时间,因为在此之后的任何时间,您的进程可能会在不通知的情况下终止。

于 2012-01-28T16:19:40.187 回答
1

小心使用静态变量。按照链接了解有关 Singleton 的说明(也使用静态变量来维护状态):https ://stackoverflow.com/a/9004638/1127492

于 2012-01-28T16:32:48.633 回答
0

您可以在活动中的方法 onDestroy 或其他响应退出的方法上将这些值保存在 SQLite 上。

于 2012-01-28T19:24:04.323 回答