我有一个静态的Preferences类,其中包含一些应用程序首选项和类似的东西。可以在其中存储对ApplicationContext的引用吗?我需要该引用,以便可以在不继承Activity的类中获取缓存文件夹和类似内容。

最佳答案

如果不使用it can cause significant memory leaks,那么您就可以在那里使用ApplicationContext了。

但是,您遇到的问题是static变量可能无法保留其值。由于Android处理应用程序的方式,您的应用程序可能会被杀死,然后重新启动(通常是由于用户切换到其他应用程序),以这种方式,您的static变量将变为null,而对其进行设置的代码将不会不能运行。 Have a look at this question for a more detailed answer

可能可以解决此问题,但是测试所有可能导致您的变量以null结尾的可能性将非常耗时且容易出错。因此,在我的静态首选项类中,我已经使需要Context的任何方法都将其作为参数。例如:

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

很难看,但是可以用。

10-05 23:25