我使用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,如果这是唯一的问题......
任何想法我该如何解决这个问题?
答案 0 :(得分:4)
经过更彻底的调试和研究后,我意识到问题不在XmlPullParser
上,正如我所怀疑的那样,它只是没有任何意义......
真正的问题在于我正在解析日期并使用SimpleDateFormat
,指定的语言环境与当前使用的语言环境不同。 ICS以下的Android版本(如果我没有记错的话)有严重的错误,需要很长时间来加载SimpleDateFormat
所需的区域设置信息。这些版本在系统引导时加载和缓存默认系统区域设置(用户设置)和Locale.US
,如果任何这些区域设置与SimpleDateFormat
一起使用,则操作速度快。否则,它就像地狱一样缓慢。
我还为每个日期解析创建了一个SimpleDateFormat
的新实例,这是不必要的和愚蠢的。使用单个对象作为实例变量,大大减少了解析文件所花费的时间。