【发布时间】:2009-07-29 22:29:26
【问题描述】:
我在我的代码中使用了一个静态类,它定义了我在 Activity onStop/onStart 调用之间重用的静态字段。这是一个场景:
- 用户点击“授权”按钮(静态数据已初始化)
- 活动停止并调用网络浏览器
- 浏览器执行回调,Activity恢复(静态数据复用)
我的至少一个用户在第 3 步报告了我无法重现但看起来像重置静态数据的失败
有什么建议吗?
【问题讨论】:
我在我的代码中使用了一个静态类,它定义了我在 Activity onStop/onStart 调用之间重用的静态字段。这是一个场景:
我的至少一个用户在第 3 步报告了我无法重现但看起来像重置静态数据的失败
有什么建议吗?
【问题讨论】:
那不安全。您的进程可以在 onStop 和 onStart 之间被终止,因此所有静态数据都将消失。事实上,您的活动甚至可以在它到达 onStop 之前被杀死。在您的测试中,该进程没有被杀死,但它是针对用户的。请参阅Android activity life 循环,它有一个很好的流程图来显示可能性。
您需要以其他方式存储数据,例如在首选项或数据库中。
【讨论】:
如果此静态数据与您刚刚停止的活动有关 - 您可以使用普通的非静态字段 + onSaveInstanceState 方法。
@Override
protected void onSaveInstanceState(Bundle outState) {
// ... save your Serializable data here in outState bundle
super.onSaveInstanceState(outState);
}
情况是:
在大多数情况下,第二点不会出现。系统可以但不必杀死您的应用程序进程。如果没有 - 您将不会获得 onCreate 方法,但会获得 onStart 和 onResume 方法,并且您的字段将保持不变。
【讨论】: