你是正确的ApplicationContext,因为如果你不这样做,它会导致严重的内存泄漏.
但是,您遇到的问题是static变量可能不会保留其值.由于Android处理应用程序的方式,您的应用程序可能会被杀死然后重新启动 - 通常是由于用户切换到其他应用程序 - 这样您的static变量将变为null,而您设置它的代码将不会跑. 请查看此问题以获得更详细的答案.
有可能解决这个问题,但测试可能导致变量结束的所有可能性null将是耗时且容易出错的.所以在我的静态首选项类中,我已经制作了任何需要Context将其作为参数的方法.例如:
static int getSomeIntegerPreference(Context context) {
return PreferenceManager.getDefaultSharedPreferences(context).getInt(PREFERENCE_SOME_INTEGER, 0);
}
Run Code Online (Sandbox Code Playgroud)
这很难看,但它确实有效.