为什么Android有自己的方式来获取当前的语言环境?

http://developer.android.com/guide/topics/resources/localization.html上的Android文档说明您可以使用此方法获取当前区域设置:

context.getResources().getConfiguration().locale 

似乎Java已经以这种方法的forms提供了这些信息:

 java.util.Locale.getDefault() 

那么为什么Android开发人员会介绍另一种获取语言环境的方法呢? 当同时并行运行时,上面两行代码会产生不同的结果吗?

Related of "为什么Android有自己的方式来获取当前的语言环境?"

我同意这是令人困惑的,虽然我没有攻击它,也没有我在捍卫它,我可以看到它允许你做一些事情。

让我们从头开始。

java.util.Locale.getDefault()由java运行时定义。 它是手机/设备的区域设置。 当没有语言环境时,它支持DateFormats(ISO Dateformat标准,美国格式标准等),NumberFormats(逗号或小数,3或4的分组等)和CurrenyFormats(它看起来像$或CAD)。给出。 对于这些情况,最好将Locale指定为这些types的对象。

context.getResources().getConfiguration().locale是在给定Context中向当前资源包注册的语言环境。 它可以包括所有资源内容将尊重当前上下文/资源对的区域设置值。 配置可以类似于最佳过滤到当前资源的设备的当前状态。 您不一定需要指定根据区域设置更改的任何内容,但它是一个选项。

资源在Configuration中使用一组鉴别器,如方向,屏幕宽度,区域设置等。因此,在您的应用程序中,您可以通过仅将语言环境应用程序配置更改为其他语言环境来覆盖当前的Resources()。 例如,您正在为地址制作布局。 您可能希望某些字段根据所选国家/地区的变化而变形。 (对于这样的应用程序,并不是说这是正确的行为,但现在最简单的想法)。 如果您不得不简单地依赖Locale.getDefault(),那么当您想要按照我刚才描述的方式执行某些操作时,它会使系统应用程序和状态发生一些尴尬的重置。

您基本上需要修改整个设备的Locale(这不一定是安全的,也不是任何老用户都喜欢的东西)。 即使我们忽视安全管理器会被主机vm复制的问题; 在大多数设备上,有很多状态是为国家/地区套件缓存的。 因此,在将此值转换为(如果任何人都可以这样做)时,会出现相当大的滞后并且可能存在很多不稳定性。 另一种选择是始终指定所有内容的区域设置。 你可以看到那将是多么令人讨厌。 所以它在Context的配置中。

因此,虽然它很尴尬,但确实提供了额外的自由度和保护,以及便利性。 大多数情况下,它将是Locale.getDefault(),因为您的应用程序是从基本上下文初始化为Locale.getDefault()的进程启动的。 一般来说,我会回避过多使用Locale.getDefault()值。 消费者应用程序开发中的次数不会太多,应该值得信任。

同样不是基于事实,因为我不是OS开发人员,只是主要基于分析系统的优缺点。 我认为配置中的语言环境是完全合理的。