Android应用程序和Activity之间的静态存储

标签 android android-activity static singleton storage

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

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;
  }
}

所以在主要 Activity onCreate 中我这样做:

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

然后开始其他 Activity , Action 流程为:

MainActivity -> ActionActivity -> PluginActivity

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

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

那么,如果发生意外异常等情况,可以释放/清除具有静态成员的对象(例如我的 Global 类)吗?

最佳答案

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

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

关于Android应用程序和Activity之间的静态存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12727236/

相关文章:

android - 屏幕锁定时无法运行 ble 扫描仪

android - 如何将复制的文本传递给 Android 中的其他 Activity

android - 从另一个 Activity 启动主启动器 Activity

c - 为什么内联函数需要 static 关键字?

objective-c - Objective C/C静态方法性能

android - 如何减少 Android 中两个并排 ImageView 之间的空间?

Android OnItemClickListener 不起作用

java - 由于缺少/而未创建文件夹?

android - 适用于 Android 的 Google 登录

java - 静态 block 内的嵌套类未被外部类的方法识别