我有一个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&插件是我使用该类的getData()方法的地方。
现在在某些情况下,我得到了非常奇怪的行为......如果PluginActivity(例如NullPointerException)中发生了一些不受欢迎的事情,则活动崩溃并且应用程序返回到启动它的ActionActivity,但是,此时, ActionActivity的onCreate(其中Global类应该被初始化)我得到一个异常,因为getData()返回null(并且isInitialized()为false),因为MainActivity从未初始化Global类。
那么,如果发生类似意外异常的事情,那么像我的Global类这样的静态成员的对象是否可以被释放/清除?
答案 0 :(得分:4)
一般而言,活动应相互独立。你不应该依赖它们以任何特定的顺序发动,或者根本不是。
相反,如果您需要在活动之间共享全局状态数据,即不仅通过onActivityResult()
,子类Application
传递意图附加信息或结果,请将init代码放入其onCreate()
中并使用getApplication()
从活动中访问它。还记得在清单中声明应用程序类。当您的任何活动正在运行时,系统会注意应用程序对象。
答案 1 :(得分:0)
在Android中,每当应用程序崩溃时,静态变量都将被丢弃。这就是您获得NullPointerException
的原因。而不是使对象静态创建Parcelable
或Serializable
类并获取和设置字段,然后使用intent传递该对象。在另一项活动中,您可以获得Parcelable
或Serializable
类,并且可以使用其属性。