android bug或滥用Configuration对象?

cod*_*ber 1 configuration android locale

我们在Application对象的onCreate方法中有一些代码可以更改ApplicationContext配置中的默认本地。

它看起来像:

Locale locale = new Locale(sSavedLocale);
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getResources().updateConfiguration(config, getResources().getDisplayMetrics());
Run Code Online (Sandbox Code Playgroud)

然后我们开始主要活动,然后从那里开始其他活动和任务。只要我不引起屏幕旋转等配置更改,一切都OK。如果我旋转屏幕,即使应用程序对象保持不变,语言环境也会返回到设备默认值。

深入研究android的ActivityThread和其他内部类的代码,我可以看到ApplicationContext本身,并且在配置更改事件中mainThread中的上下文已更改回默认值。

对我来说似乎是个错误,因为ii在启动应用程序时在应用程序级别设置了配置,除非本地配置发生更改,否则我可能希望保持更改。

我没有检查过我想应用的开放错误。有人认为我错了,这是可以的行为吗?

aus*_*len 5

您可以添加onConfigurationChangedApplication课程中。

    @Override
    public void onConfigurationChanged(Configuration newConfig)
    {
        super.onConfigurationChanged(newConfig);
        if (newConfig.locale != null)
        {
            Locale locale = new Locale(sSavedLocale);
            Locale.setDefault(locale);
            Configuration config = new Configuration();
            config.locale = locale;
            getResources().updateConfiguration(config, getResources().getDisplayMetrics());
        }
    }
Run Code Online (Sandbox Code Playgroud)