4

XmlPullParser非常に単純で短い XML ファイル (120 行、10.5Kb) を解析するために、公式の Android ガイドを使用して単純な XML パーサーを実装しました。Android 4.1.1 を実行している私の HTC One X では、解析にほんの一瞬しかかかりません。しかし、Android 2.1 を実行している HTC Hero では、3 分以上かかりました...

2つの間のハードウェアが大きく異なることは知っていますが、このような小さなファイルで3分? 容認できません... 特に XmlPullParser は API 1 から利用可能になっているため、これほど遅いのは意味がありません。

問題を特定するために、解析コードを段階的に調べました。nextTag()そして、 の処理に非常に時間がかかっていることに気付きました。他のすべてはかなり高速に見えます。これが唯一の問題かどうかはわかりません...

どうすればこれを修正できますか?

4

1 に答える 1

4

XmlPullParserより徹底的なデバッグと調査を行った結果、問題は私が思っていたものではなく、意味をなさないことに気付きました...

本当の問題は、SimpleDateFormat現在使用されているロケールとは異なるロケールを指定して、日付を解析して を使用していたという事実にありました。ICS より前の Android バージョン (私が間違っていなければ) には、これに重大なバグがあり、必要なロケール情報をロードするのに時間がかかりますSimpleDateFormatLocale.USこれらのバージョンは、システムの起動時にデフォルトのシステム ロケール (ユーザー設定) をロードしてキャッシュし、これらのロケールのいずれかが使用されているSimpleDateFormat場合、操作は高速です。そうでなければ、地獄のように遅いです。

SimpleDateFormatまた、各日付解析の新しいインスタンスを作成していましたが、これは不必要で愚かでした。単一のオブジェクトをインスタンス変数として使用すると、ファイルの解析にかかる時間が大幅に短縮されました。

于 2012-12-25T04:29:04.923 に答える