我有一个 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/