我在我的代码中使用了一个静态类,它定义了一个静态字段,我在Activity onStop / onStart调用之间重用它。这是一个场景:
至少有一位用户在步骤3报告了我无法重现的故障但看起来像重置静态数据
有什么建议吗?
答案 0 :(得分:10)
这不安全。您的进程可以在onStop和onStart之间被终止,因此所有静态数据都将消失。实际上,您的活动甚至可以在进入onStop之前被杀死。在您的测试中,该过程未被杀死,但它是针对用户的。请参阅Android activity life周期,其中有一个很好的流程图显示了可能性。
您需要以其他方式存储数据,例如在prefs或数据库中。
答案 1 :(得分:0)
如果此静态数据与您刚刚停止的活动相关 - 您可以使用普通的非静态字段+ onSaveInstanceState方法。
@Override
protected void onSaveInstanceState(Bundle outState) {
// ... save your Serializable data here in outState bundle
super.onSaveInstanceState(outState);
}
案件将是:
在大多数情况下,第二点不会发生。系统可以但不必杀死您的应用程序进程。当它没有 - 你将不会得到onCreate方法,但onStart和onResume方法和你的字段将保持不变。