Android中的静态安全吗?

时间:2009-07-29 22:29:26

标签: android static

我在我的代码中使用了一个静态类,它定义了一个静态字段,我在Activity onStop / onStart调用之间重用它。这是一个场景:

  1. 用户点击“授权”按钮(静态数据已初始化)
  2. 停止活动并调用Web浏览器
  3. 浏览器执行回调并恢复活动(重复使用静态数据)
  4. 至少有一位用户在步骤3报告了我无法重现的故障但看起来像重置静态数据

    有什么建议吗?

2 个答案:

答案 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);
}

案件将是:

  1. 关闭活动并转到浏览器(调用onStop)
  2. 系统会终止您的应用程序进程(调用onSaveInstanceState 你保存数据的地方)
  3. 用户导航回您的活动(onCreate被调用 savedInstanceState参数)
  4. 在大多数情况下,第二点不会发生。系统可以但不必杀死您的应用程序进程。当它没有 - 你将不会得到onCreate方法,但onStart和onResume方法和你的字段将保持不变。