Android的文档这里http://developer.android.com/guide/topics/resources/localization.html解释,你可以得到当前的区域用此方法:
context.getResources().getConfiguration().locale
这似乎已的Java提供了这种方法的形式这样的信息:
java.util.Locale.getDefault()
那么,为什么在Android开发人员介绍另一种方式来获得的语言环境? 将上面的代码两行,当在同一时间运行并排侧以往任何时候都产生不同的结果?
我同意这是混乱的,虽然我不是攻击它我也没有捍卫它,我可以看到它让你做一些事情。
让我们从头开始。
java.util.Locale.getDefault()
是由Java运行时定义的。 这是手机/设备的区域。 是什么力量之类的DateFormats(ISO日期格式标准,美国的格式标准等),NumberFormats(逗号或小数,3个或4个等分组)和CurrenyFormats(它看起来像一个$或CAD)时,没有语言环境给出。 对于这些情况下,它可能是最好到指定区域,以这些类型的对象反正。
context.getResources().getConfiguration().locale
是与在给定的上下文中的当前资源包中注册的语言环境。 它可以包括的语言环境值,所有的资源内容将在当前环境/资源对尊重。 该配置可以是有点像最过滤到当前资源的设备的当前状态。 你不一定需要指定基于区域改变任何内容,但它是一个选项。
资源使用一组鉴别的像方向,屏幕宽度,语言环境等配置,使您的应用程序中,您可能允许只是改变了语言环境的应用程序配置到不同的区域与另一个覆盖当前资源()。 例如像您正在为一个地址的布局。 您可能需要某些字段根据什么选择的国家是变身。 (不是说这是这样一个应用程序正确的行为,但它想,现在最简单的事情)。 如果你要单纯依靠Locale.getDefault(),它将使系统的应用程序和国家的一些尴尬的复位,当你想我刚才描述的做一些事情。
您将基本上被要求修改区域为整个设备(这不一定是安全的,也不是任何东西的老用户将享有)。 即使不理会由主机VM被复制的安全管理问题; 在大多数设备上有很多国家已缓存为国家套件。 因此,会有相当滞后,可能是一个很大的不稳定性,同时在切换这个值(如果有人能做到这一点即是)。 另一种选择将是始终指定区域的一切。 你可以看到如何讨厌这将是。 所以它的上下文的配置中。
因此,尽管它的笨拙,但它提供的自由和保护,以及方便的额外程度。 大部分资金将被Locale.getDefault的时间(),因为你的应用程序从一个过程,是基本上下文()被初始化为Locale.getDefault开始。 一般来说,我会从使用Locale.getDefault()值太多避而远之。 有没有在消费应用开发太多的时候,那将是什么,应该是可信的。
因为我不是一个操作系统开发,只是大多是基于分析系统的优点和缺点同样没有事实根据。 我认为,在配置的语言环境是完全合理的。