2

我有一个 Android 应用程序,我在其中使用一个类来存储活动之间的静态数据,例如:

class Global
{
      private static boolean mInitialized = false;
  private static String  mData        = null;

  public static void init()
  {
    mData        = "something";
    mInitialized = true;
  }

      public static boolean isInitialized()
      {
            return mInitialized;
      }

  public static String getData()
  {
    return mData;
  }
}

所以在主要活动 onCreate 我做:

if( Global.isInitialized() == false )
    Global.init();

然后启动其他活动,动作流程为:

MainActivity -> ActionActivity -> PluginActivity

Main 是我初始化 Global 类的地方,Action & Plugin 是我使用该类的 getData() 方法的地方。

现在在某些情况下,我得到了非常奇怪的行为......如果在 PluginActivity (例如 NullPointerException )中发生了意想不到的事情,则活动崩溃并且应用程序返回到启动它的 ActionActivity,但是,此时,在 onCreate 期间ActionActivity(应该在其中初始化 Global 类)我得到一个异常,因为 getData() 返回 null (并且 isInitialized() 为 false),因为 Global 类从未被 MainActivity 初始化。

那么,如果发生意外异常之类的事情,可以释放/清除像我的 Global 类这样的静态成员的对象吗?

4

2 回答 2

4

一般来说,活动应该相互独立。您不应该依赖它们以任何特定顺序启动,或者根本不应该依赖它们。

相反,如果您需要在活动之间共享全局状态数据,即不仅仅是通过onActivityResult()子类传递意图附加或结果的参数Application,请将初始化代码放入其中onCreate()并使用活动从活动中访问它getApplication()。还要记住在清单中声明应用程序类。当您的任何活动正在运行时,系统会注意应用程序对象是否存在。

于 2012-10-04T12:32:42.023 回答
0

在 Android 中,每当应用程序崩溃时,静态变量都会被丢弃。这就是你得到NullPointerException. 与其使对象成为静态对象,不如创建一个ParcelableSerializable 类并获取和设置字段,然后按意图传递该对象。在另一个活动中,您可以获得该ParcelableSerializable类,您可以使用它的属性。

于 2012-10-04T12:40:02.170 回答