How to solve the XML parsing performance issue on Android

后端 未结 8 1870
耶瑟儿~
耶瑟儿~ 2020-12-25 08:31

I have to read a XML file with about ~4000 lines on Android. First I tried the SimpleXML library because it\'s the easiest and it took about 2 minutes on my HTC Desire. So I

相关标签:
8条回答
  • 2020-12-25 09:00

    Original answer, in 2012

    (note: make sure you read the 2016 update below!)

    I just did some perf testing comparing parsers on Android (and other platforms). The XML file being parsed is only 500 lines or so (its a Twitter search Atom feed), but Pull and DOM parsing can churn through about 5 such documents a second on a Samsung Galaxy S2 or Motorola Xoom2. SimpleXML (pink in the chart) as used by the OP ties for slowest with DOM parsing.

    SAX Parsing is an order of magnitude faster on both of my Android devices, managing 40 docs/sec single-threaded, and 65+/sec multi-threaded.

    Android 2.3.4:

    performance comparison of xml parsing methods on Android

    The code is available in github, and a discussion here.

    Update 18th March 2016

    OK, so its been almost 4 years and the world has moved on. I finally got around to re-running the tests on:

    1. A Samsung Galaxy S3 running Android 4.1.2
    2. A Nexus7 (2012) running Android 4.4.4
    3. A Nexus5 running Android 6.0.1

    Somewhere between Android 4.4.4 and Android 6.0.1 the situation changed drastically and we have a new winner: Pull Parsing FTW at more than twice the throughput of SAX. Unfortunately I don't know exactly when this change arrived as I don't have any devices running Android > 4.4.4 and < 6.0.1.

    Android 4.1.2:

    performance comparison of xml parsing methods on Android 4.1.2

    Android 4.4.4:

    performance comparison of xml parsing methods on Android 4.4.4

    Android 6.0.1:

    performance comparison of xml parsing methods on Android 6.0.1

    0 讨论(0)
  • 2020-12-25 09:02

    Rather than making it a synchronous process, make it asynchronous. You can have a button that starts an IntentService which will process the data for you and will update the results and show a notification when it is done. That way you don't stop the UI thread.

    0 讨论(0)
提交回复
热议问题