【问题标题】:Why is Android XmlPullParser REALLY slow on my older device?为什么 Android XmlPullParser 在我的旧设备上真的很慢?
【发布时间】:2012-12-23 19:45:49
【问题描述】:

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

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

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

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

【问题讨论】:

  • @Paul 我不确定是不是这样......我还测试了这两个其他设备,都是 ZTE Blade。一个运行普通的 Android 2.2,另一个运行 CyanogenMOD 和 Android 2.3.x。他们都启用了 JIT,并且提要仍然需要很长时间才能解析......

标签: android xmlpullparser


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2013-06-01
    • 2014-06-13
    • 1970-01-01
    • 2017-05-22
    • 2015-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多