您是否只需要为TimeZone和Locale调用setDefault()一次?
问题描述:
Calendar.getInstance()
其中一个构造函数接受TimeZone
和Locale
,并且TimeZone
和Locale
都有一个setDefault()
函数,它是一个同步方法。您是否只需要为TimeZone和Locale调用setDefault()一次?
在Android的上下文中,这是否意味着我只需要在Activity onCreate()
上调用一次?如果我这样做,如果活动暂停并恢复,该怎么办?或者,我可以在我的自定义应用程序类onCreate()
上调用这些setDefault()
,以忘记Android生命周期如何影响我的日历的价值?
最重要的是,在Android中使用setDefault()
的最佳做法是什么?
答
虽然我必须重申@Andreas的观点,你真的不应该这样做;如果必须的话,那么在整个过程中调用它们就足够了,因为它们存储在static
字段中。
如果您有应用程序的子类,则应该足以覆盖Application.onCreate()
并在那里设置值。
如果您担心只有一组本地化字符串,更好的建议是将所有翻译的字符串放入默认的values
目录(通常用于en
字符串,但如果它是您唯一的翻译,则此是最好的方法)。这样,用户所在的区域设置就没有关系,他们只会看到这组字符串。
+0
说服我够了,谢谢! –
最佳做法是不要打电话给他们。他们默认为电话设置,这意味着用户的偏好,所以你为什么要改变他们的东西? – Andreas
@Andreas根据TimeZone.class中的doc,你的陈述是不准确的:'只覆盖当前进程的默认时区。 param timeZone自定义时区,或{code null}将默认值设置为用户的首选值。“ –
这是怎么说我错了?我说'TimeZone'和'Locale'的默认值已经从手机的设置中设置好了,也就是用户的喜好。你的引用并不矛盾。它只定义了如果你打电话给他们会发生什么事,而我只是在谈论他们根本不打电话给他们。 – Andreas