2011-12-19 105 views
5

我正面临着一个关于静态变量的问题,我正在使用我的所有项目(它包含文件中的一些字段)。在某些情况下,变量会失去她的价值,但并非总是如此。 我已阅读有关静态变量的生命周期,她丢失了3种情况下的值:静态变量丢失值

1)类被卸载。

2)JVM关闭。

3)过程死亡。

所以我有一个问题:是不是足够重写活动onResume并再次解析文件,并再次提供静态变量,如果它为空?

+2

发布您尝试过的相关代码。 – Lion 2011-12-19 15:55:02

+0

感谢您的答案,但在应用程序中,当应用程序进入后台时,似乎我失去了我的值。 – 2011-12-27 13:09:45

回答

2

如果你真的必须使用静态/全局把它们放到你的自定义类中,它扩展了Application。像这样:

public class FooApplication extends Application { 
    protected Bar myBar; 

    public Bar getBar() { return myBar; } 
    public void setBar(Bar bar) { myBar = bar; } 
    ... 
} 

声明您将使用自定义应用程序类使用您的清单。

<application 
    android:icon="@drawable/ic_launcher_noteit1" 
    android:label="@string/app_name" 
    android:theme="@style/App_Theme" 
    android:name="FooApplication" 
    android:debuggable="true"> 

现在你可以使用任何(FooApplication) getApplication()活动访问应用程序对象。请注意,这不是推荐的方法。推荐的方法是使用单例模式。

如果文件的解析是一个昂贵的操作,你可能不想在每个onResume上解析它。相反,您可能需要考虑使用onRetainNonConfigurationInstance()

1

我想确保您首先不会无意中重置该变量。为此,您可能需要创建(例如)getMyVariable()setMyVariable()函数,将一些日志记录放入其中并使用它们而不是直接访问该变量。