【问题标题】:Static parameters not retained across Activities未跨活动保留的静态参数
【发布时间】:2010-09-23 23:44:05
【问题描述】:

我正在开发一个 Android 应用程序,并且正在使用我编写的库。这个库有一个包含一些静态字段的类。其中之一是 API 密钥。我的库中的其他类使用此密钥来调用远程服务。

我在创建主 Activity 时初始化一次 API 密钥,并且 savedInstanceState 为空。

我的问题在于其他活动,因为它们有时在使用我的库进行调用时使用正确的 API 密钥,有时却没有。好像没有设置 API 密钥。

特别是我从我的偏好活动中调用的一项活动由于未设置 API 密钥而总是失败。

是否像在普通 Java 应用程序上那样跨活动维护静态字段?我认为对于特定的 jvm 实例,所有静态字段都被保留。 Android 平台是否为新的活动使用新的 jvm 实例?

【问题讨论】:

  • 你应该使用 sharedPreference 而不是静态全局变量来实现它
  • 该库仅针对 java 编写。它不知道它将在哪个平台上运行。你是说静态字段在 android 中是 volatile 的?

标签: android static jvm static-members


【解决方案1】:

请阅读:

http://developer.android.com/guide/topics/fundamentals.html#procthread

您的应用正在一个进程中运行。该进程在后台时可能需要被终止。您的应用必须在后台正确保存任何合适的状态(通过 for ex Activity.onSaveInstanceState())和/或在稍后在新进程中重新启动时重建其状态。

【讨论】:

  • 我明白了...我以为只有活动被杀死而不是整个过程..所以我想我需要在所有活动中保存和恢复我的静态字段...:(
【解决方案2】:

您是直接还是间接访问静态字段?其他活动是否与 Api 密钥混淆?如果是这样,您应该在访问之前synchronized

【讨论】:

  • Γειά και σε σένα :) 我只通过方法设置和获取成员。而且我只将它设置在一个地方,一次(或每当我的主要活动在没有保存状态的情况下创建时)。在所有其他地方,我都明白了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多