繁体   English   中英

保持对Locale实例的静态引用好吗?

[英]Is it good to keep static references to Locale instances?

因此,我正在尝试开发一个应用程序,您可以在其中将语言(在首选项活动中)更改为系统默认语言或特定语言。 每当您更改语言时,应用都会重新启动并选择新的语言环境。 当第一个活动开始时,它将必须使用的语言环境保存到Utils类的静态变量中。 在每个活动的onCreate方法中,我都会加载该语言环境。

现在,为澄清起见,这是Utils类的Locale部分:

private static Locale locale = null;
public static boolean isLocaleNull() {
    return locale == null;
}
public static void setLocale(Locale locale) {
    Utils.locale = locale;
}
public static void loadLocale(Context baseContext) {
    if (locale == null) return;
    Locale.setDefault(locale);
    Configuration config = new Configuration();
    config.locale = locale;
    baseContext.getResources().updateConfiguration(config, baseContext.getResources().getDisplayMetrics());
}

这是我的第一个活动的onCreate(仅区域设置部分):

if (!Utils.isLocaleNull()) {
    String locale = PreferenceManager.getDefaultSharedPreferences(getBaseContext())
            .getString(getResources().getString(R.string.prefsKeyLanguage), "default");
    if (locale != null && !locale.equals("default"))
        Utils.setLocale(new Locale(locale));
}

这是我在所有活动中加载语言环境的方式:

Utils.loadLocale(getBaseContext());

最后,在loadLocale中,我们有if (locale == null) return; 在语言环境加载器中,我们具有if (... && !locale.equals("default")) ,这意味着如果选择了“系统默认if (... && !locale.equals("default")) ,则语言环境将为null,这意味着如果选择了“系统默认值”,则语言环境将不会更改。

一切都很完美! 我的意思是,它按预期工作。 但是在某些情况下它会失败吗? 这是个好主意吗? 我知道在某些情况下,保持对实例的静态引用是一个坏主意。 这是其中一种情况吗? 如果是,该怎么办?

谢谢!

没错,这不是一个好主意,因为Android会在需要内存时立即删除该静态变量(并且这种情况经常发生)。

您应该使用SharedPreferences设置和检索您的Locale

要处理SharedPreferences中的Object ,请使用Gson

保存

 Editor prefsEditor = mPrefs.edit();
 Gson gson = new Gson();
 String json = gson.toJson(MyObject);
 prefsEditor.putString("MyObject", json);
 prefsEditor.commit();

回归

Gson gson = new Gson();
String json = mPrefs.getString("MyObject", "");
MyObject obj = gson.fromJson(json, MyObject.class);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM