Android - 存储对ApplicationContext的引用

nix*_*ixa 5 java static android reference

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

Dav*_*ebb 6

你是正确的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)

这很难看,但它确实有效.