4

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

我知道两者之间的硬件有很大的不同,但是3分钟对于这么小的文件?这是不可接受的......尤其是自从 API 1 以来 XmlPullParser 就已经可用,这么慢是没有意义的。

为了尝试查明问题,我一步一步地浏览了解析代码。而且我注意到这nextTag()是一个需要很长时间才能处理的问题,其他一切似乎都相当快。不知道这是不是唯一的问题......

有什么想法可以解决这个问题吗?

4

1 回答 1

4

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

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

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

于 2012-12-25T04:29:04.923 回答