Java Android-存储对ApplicationContext的引用

Java Android-存储对ApplicationContext的引用,java,android,static,reference,Java,Android,Static,Reference,我有一个静态首选项类,它包含一些应用程序首选项之类的东西。可以在那里存储对ApplicationContext的引用吗?我需要那个引用,这样我就可以在不继承活动的类中获取缓存文件夹和类似的东西。如果不继承活动,您就可以使用那里的ApplicationContext 但是,问题是静态变量可能无法保留其值。由于Android处理应用程序的方式,您的应用程序可能会被终止,然后重新启动—通常是由于用户切换到其他应用程序—这样您的静态变量将变为null,设置它的代码将不会运行 也许可以解决这个问题,但是测

我有一个静态首选项类,它包含一些应用程序首选项之类的东西。可以在那里存储对ApplicationContext的引用吗?我需要那个引用,这样我就可以在不继承活动的类中获取缓存文件夹和类似的东西。

如果不继承活动,您就可以使用那里的
ApplicationContext

但是,问题是
静态
变量可能无法保留其值。由于Android处理应用程序的方式,您的应用程序可能会被终止,然后重新启动—通常是由于用户切换到其他应用程序—这样您的
静态
变量将变为null,设置它的代码将不会运行

也许可以解决这个问题,但是测试所有可能导致变量最终为
null
的可能性将非常耗时且容易出错。因此,在我的静态首选项类中,我使任何需要
上下文的方法都将其作为参数。例如:

static int getSomeIntegerPreference(Context context) {
    return PreferenceManager.getDefaultSharedPreferences(context).getInt(PREFERENCE_SOME_INTEGER, 0);   
}

虽然很难看,但它可以工作。

嗯,我在第一次活动开始时将Preferences.applicationContext设置为getApplicationContent()。所以我认为它应该存在,除非应用程序死了(VM死了,进程被杀死了,等等)。如果它死了,在下一次启动时,它将再次初始化Preferences.applicationContext,所以我认为它应该可以正常工作。我需要类似的东西,因为我需要访问某些类中的上下文,而这些类看不到getApplicationContext()。例如,我的Category类需要为每个类别下载图标,因此我将图标路径设置为该路径。filepath=Preferences.applicationContext.getCacheDir().toString您需要在使用
首选项的每个活动中初始化
首选项.applicationContext
。当您运行与第一个活动不同的活动时,您的进程可能会被终止,Android可以将用户返回到应用程序中的该点,跳过第一个活动。