Android XML解析學習——方式比較

一.基礎知識

經過這段時間的學習,我們已經瞭解了Android平臺上用於解析XML的三種方式:SAXDOMPull。並且在學習的過程中也介紹了這三種方式各自的特點及適合的使用場合,簡單的來說,DOM方式最直觀和容易理解,但是隻適合XML文檔較小的時候使用,而SAX方式更適合在Android系統中使用,因爲相比DOM佔用內存少,適合處理比較大的XML文檔,最後的Pull方式使用場合和SAX類似,但是更適合需要提前結束XML文檔解析的場合。

在這部分的學習中,我們將對以上三種方式解析XML的性能進行一下簡單的比較,通過記錄比較他們讀取相同XML文檔的時間來更好的理解他們的性能,從而使你在不同的場合更好的選擇使用那一種XML的解析方式。

 

下面我們就用上面介紹的幾種方式來實現解析XML形式的USGS地震數據的Demo例子以作比較。

二.實例開發

我們要完成的效果圖如下圖1所示:

各種方式解析花費的時間比較

 

我們分別使用Java SAXAndroid SAXDOMPull方式解析相同的XML地震數據,並記錄他們完成解析所花費的時間,結果如上圖所示。

新建一個Android工程AndroidXMLDemoCompare

添加進之前Demo工程AndroidXMLDemoSax中的EarthquakeEntry.javaSaxEarthquakeHandler.java文件,工程AndroidXMLDemoSaxII中的AndroidSaxEarthquakeHandler.java文件,工程AndroidXMLDemoDom中的DomEarthquakeHandler.java文件,和工程AndroidXMLDemoPull中的PullEarthquakeHandler.java文件。

如果需要從本地讀取xml數據的話,同時在assets文件夾下添加保存爲xml格式了的USGS地震數據USGS_Earthquake_1M2_5.xmlUSGS_Earthquake_7M2_5.xml,如果需要聯網讀取的話,在manifest.xml文件中添加權限:

 

 

並修改res/layout下的main.xml爲:

主要定義了4個分別啓動Java SAXAndroid SAXDOMPull方式解析的按鈕Button,和4個顯示解析所花費時間的TextView

接着修改AndroidXMLDemoCompare.java文件的內容爲:

首先也是定義各個ButtonTextView控件,接着爲各個Button註冊單擊事件處理器,在單擊事件處理的回調函數中,主要就是運行對應XML解析方式的解析過程,並且分別記錄解析前和解析後的系統時間來計算解析所花費的時間,

完成了,可以保存運行看下效果。

 

2 解析時間比較

左圖是解析1天內2.5級以上的地震數據,約20來條地震信息時各個解析方式所花費的時間,右圖是解析7天內2.5級以上的地震數據,約180來條地震信息時各個解析方式所花費的時間。從上圖我們可以看到Java SAXAndroid SAXPull方式花費的時間基本差不多,因爲他們都是基於事件處理的方式,並且Java SAXAndroid SAX底層調用的都是相同的org.xml.sax包中XMLReader解析器。而DOM方式相對來說所花費的時間就會長點,在地震數據條數較少和較多時都比較長。因此不管是從內存的消耗角度或者解析使用的時間角度來考慮,在Android平臺上的應用程序中都不太推薦使用DOM方式來解析XML數據。但是Java SAXAndroid SAXPull就看你喜歡使用哪個和你具體的使用場合了,性能上他們基本相同。

 

三.總結

在這部分內容中我們學習了各個解析方式的性能比較,即解析同一個XML文檔時所花費時間的比較,並且從結果可以看出DOM方式的性能相對來說差點,而Java SAXAndroid SAXPull方式的性能基本相同。

這樣我們就比較全面的學習了Android平臺上對XML文檔進行解析的各種方式,但目前我們只是使用現成的XML文檔來解析,實際上在使用過程中我們可能還會需要構造XML文檔,比如可能會有需要向服務器發送XML,或者把一份數據以XML的形式保存在本地,這塊內容就是寫XML,我們以後接着學習。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章