android – 当包含时区时,SimpleDateFormat需要太长时间

前端之家收集整理的这篇文章主要介绍了android – 当包含时区时,SimpleDateFormat需要太长时间前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用这种简单的日期格式
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS Z");

问题是,当我使用它时,转换时间需要很长时间,在logcat中我看到类似这样的东西

I/Resources( 4284): Loaded time zone names for en in 272ms.
I/Resources( 4284): Loaded time zone names for en in 194ms.
I/Resources( 4284): Loaded time zone names for en in 112ms.
I/Resources( 4284): Loaded time zone names for en in 111ms.
I/Resources( 4284): Loaded time zone names for en in 113ms.
I/Resources( 4284): Loaded time zone names for en in 127ms.
I/Resources( 4284): Loaded time zone names for en in 253ms.
I/Resources( 4284): Loaded time zone names for en in 110ms.
I/Resources( 4284): Loaded time zone names for en in 154ms.
I/Resources( 4284): Loaded time zone names for en in 112ms.

我如何使用简单的日期格式化器,但为了加快速度,我不想每次转换需要大约150毫秒…

以前有人有这个问题吗?

解决方法

这是由于时区区域字符串的延迟初始化.只有第一个
电话会花这么久.如果之后再次使用SimpleDateFormat
从缓存加载,不应再花那么长时间了.

在更改之前,它是在类加载时完成的,因此开始了
一项活动花了2-3秒的时间.这对用户造成了更严重的影响
经验比在第一次实际使用时需要几秒钟.该
问题是由于设计原因现在无法绕过这个问题
SimpleDateFormat api.只有速度更快的手机可以通过减少费用来解决这个
收集这些字符串的时间.

缓存发生在SimpleDateFormat正在使用的DateFormatSymbols中.通过
重用那个实例,可能只需要加载一次蜇(对于
同样的事情).您还可以在启动时在线程中创建该实例
活动,以便它在使用后已经缓存.要初始化字符串只需调用
.hashCode()强制初始化缓存.会更快但不那么简单
是序列化实例.这也会强制缓存初始化.

在此期间,请考虑在需要之前使用AsyncTask在您的流程中“预热”SimpleDateFormat.只需在AsyncTask doInBackground()中解析一些日期,以便在不会对用户造成太大影响的情况下加载时区.在您的流程中初始化后,SimpleDateFormat将快速运行,直到您的流程终止.

猜你在找的Android相关文章