为什么我的旧设备上的Android XmlPullParser真的很慢?

时间:2012-12-23 19:45:50

标签: android xmlpullparser

我使用XmlPullParser上的官方Android指南实现了一个简单的XML解析器来解析一个非常简单和简短的XML文件(120行,10.5Kb)。在运行Android 4.1.1的HTC One X上,解析它只需要几分之一秒。但是在运行Android 2.1的HTC Hero上花了不到3分钟......

我知道2之间的硬件是非常不同的,但对于这么小的文件却是3分钟?这是不可接受的......特别是因为自API 1以来XmlPullParser已经可用,所以这很慢是没有意义的。

为了尝试查明问题,我逐步完成了解析代码。而且我注意到nextTag()是需要很长时间才能处理的那个,其他一切看起来都相当快。 Dunno,如果这是唯一的问题......

任何想法我该如何解决这个问题?

1 个答案:

答案 0 :(得分:4)

经过更彻底的调试和研究后,我意识到问题不在XmlPullParser上,正如我所怀疑的那样,它只是没有任何意义......

真正的问题在于我正在解析日期并使用SimpleDateFormat,指定的语言环境与当前使用的语言环境不同。 ICS以下的Android版本(如果我没有记错的话)有严重的错误,需要很长时间来加载SimpleDateFormat所需的区域设置信息。这些版本在系统引导时加载和缓存默认系统区域设置(用户设置)和Locale.US,如果任何这些区域设置与SimpleDateFormat一起使用,则操作速度快。否则,它就像地狱一样缓慢。

我还为每个日期解析创建了一个SimpleDateFormat的新实例,这是不必要的和愚蠢的。使用单个对象作为实例变量,大大减少了解析文件所花费的时间。