2012-12-23 94 views
4

我已經使用XmlPullParser上的官方Android指南實現了一個簡單的XML解析器來解析一個非常簡單和簡短的XML文件(120行,10.5Kb)。在運行Android 4.1.1的我的HTC One X上,解析它需要幾分之一秒的時間。但在我的HTC Hero上運行Android 2.1,花了3分多鐘......爲什麼Android XmlPullParser在我的舊設備上真的很慢?

我知道2之間的硬件差別很大,但是3分鐘這麼小的文件呢?這是不可接受的...特別是自API1以來XmlPullParser已經可用,這樣做是沒有意義的。

爲了試着找出問題所在,我一步一步地完成了解析代碼。我注意到nextTag()是需要很長時間才能處理的,其他一切看起來相當快。不知道如果這是唯一的問題或不...

任何想法,我該如何解決這個問題?

+0

JIT(http://en.wikipedia.org/wiki/Just-in-time_compilation)? 2.1沒有它。 – Paul

+0

@Paul我不確定這是什麼......我也測試了這兩個其他設備,包括ZTE Blade。一個運行Android 2.2股票,另一個運行Android 2.3.x的CyanogenMOD。他們都啓用了JIT,並且Feed仍然需要很長時間才能解析... –

回答

4

經過更徹底的調試和研究,我意識到這個問題是不是在XmlPullParser我懷疑,它只是沒有任何意義......

真正的問題是這樣的事實,我是解析日期並使用SimpleDateFormat,指定與當前正在使用的語言環境不同的語言環境。低於ICS的Android版本(如果我沒有弄錯的話)有嚴重的錯誤,並且需要很長時間才能加載所需的區域設置信息SimpleDateFormat。這些版本加載和緩存系統啓動時的默認系統區域設置(用戶設置)和Locale.US,並且如果使用這些區域設置中的任何一個,則操作速度較快,但使用SimpleDateFormat。否則,它就像地獄一樣慢。

我還爲每個日期解析創建了一個新的SimpleDateFormat實例,這是不必要的和愚蠢的。使用單個對象作爲實例變量,減少了大量解析文件所花費的時間。