调用 AndroidThreeTen.init() 是强制性的吗?

Is the call to AndroidThreeTen.init() mandatory?

提问人:user149408 提问时间:7/10/2019 更新时间:7/10/2019 访问量:673

问:

ThreeTenABP README指示用户调用其应用程序的方法。是的,这是 ThreeTenBP 的(据说更快的)Android 改编版,而不是原始的(完全可移植的)ThreeTenBP。AndroidThreeTen.init()onCreate()

但是,如果我省略调用,我的应用程序似乎运行良好,没有任何明显的错误。这种方法只是为了加快速度,预计初始化时间可能很长,这样就不会在第一次使用时减慢您的速度(急切与延迟初始化)?或者,如果我没有正确初始化ThreeTenABP,我是否会冒着得到错误结果的风险?

Java Android ThreeTenBP

评论

2赞 Joachim Sauer 7/10/2019
我没有足够的信心肯定地说(因此,没有答案),但我认为如果您没有这个调用,您将失去使用优化端口的好处。该调用注册了优化的 ZoneRulesProvider,这可能是 ThreeTenABP 首先比普通 ThreeTenBP 更快的原因。另请注意,从 Android 8 开始,有一个原生实现,它使用系统原生时区数据库,因此性能应该更好。java.time
0赞 user149408 7/10/2019
是的,我知道在 Android 8+ 中,我只是不知道在两种实现之间切换的可移植方式(鉴于代码位于可移植库中,该库需要支持 Android 4.4+ 和 JRE)。java.time

答:

1赞 user149408 7/10/2019 #1

此问题介绍初始化库失败导致的错误。

主要要点:如果无法初始化 ThreeTenABP,某些方法调用(依赖于时区数据的方法调用)将抛出异常。

不确定如果您在代码中测试了每个 ThreeTenABP 调用并确保它们都没有抛出异常,会发生什么。这很可能是不受支持的配置。