編輯:初級開發
讀取XML主要有2種方法:DOM和SAX,DOM(文檔對象模型),為XML文檔的解析定義了一組接口,解析器讀入整個文檔,構造一個駐留內存的樹結構,然後代碼就可以使用DOM接口來操組整個樹結構,其優點是:整個文檔樹都在內存當中,便於操作;支持刪除、修改、重新排列等多功能。缺點是:將整個文檔調入內存(經常包含大量無用的節點),浪費時間和空間。這種方式的使用場合是:一旦解析了文檔還需要多次訪問這些數據,而且資源比較充足(如內存、CPU等)的情況。
為了解決DOM解析XML引起的這些問題,出現了SAX。SAX全稱Simple API for XML,即指一種接口,也是指一個軟件包。作為接口,SAX是事件驅動型XML解析的一個標准接口。SAX的工作原理簡單地說就是對文檔進行順序掃描,當掃描到文檔(documnet)開始與結束、元素(element)開始與結束、文檔(document)結束等地方時通知事件處理函數,由事件處理函數做相應動作,然後繼續做同樣的掃描,直到文檔結束。大多數SAX實現都會產生以下類型的事件: 在文檔內每一XML元素接受解析的前後觸發元素事件。 在處理文檔的DTD或Schema時產生DTD或Schema事件。
產生錯誤事件用來通知主機應用程序解析錯誤。
在SAX接口中,事件源是org.xml.sax包中的XMLReader,它通過parser()方法來開始解析XML文檔,並根據文檔的內容產生事件。而事件處理器則是org.xml.sax包中的ContentHander、DTDHander、ErrorHandler,以及EntityResolver這4個接口,它們分別處理事件源在解析XML文檔過程中產生的不同種類的事件。而事件源XMLReader與這4個事件處理器的連接是通過在XMLReader中的相應事件處理器注冊方法setXXXX()來完成的。
ContentHandler是Java類包中一個特殊的SAX接口,位於org.xml.sax包中。該接口封裝了一些對事件處理的方法,當XML解析器開始解析XML輸入文檔時,其會遇到某些特殊的事件,比如文檔的開頭和結束,元素開頭和結束,以及元素中的字符數據等事件。當遇到這些事件時,XML解析器會調用ContentHandler接口中相應的方法來響應該事件。主要方法有:void characters(char[] ch, int start, int length) ;void startDocument()
void startElement(String uri, String localName, String qName, Attributes atts)
void endDocument() ;void endElement(String uri, String localName, String qName) 。
ErrorHandler處理文檔中產生的錯誤。主要方法有:void error(SAXParseException exception) ;
void fatalError(SAXParseException exception) ;void warning(SAXParseException exception) 。
DTDHandler處理對文檔的DTD(Document Type Definition是一套關於標記符的語法規則)進行解析時產生的相應事件。主要方法有:void notationDecl(String name, String publicId, String systemId) ;
void unparsedEntityDecl(String name, String publicId, String systemId, String notationName) 。
EntityResolver處理外部實體。主要方法有:abstract InputSource resolveEntity(String publicId, String systemId) 。
SAX的主要優點是:不用事先調入整個文檔,占用資源少。尤其在嵌入式環境中,極力推薦采用SAX進行解析XML文檔。主要缺點是:不像DOM一樣將文檔長期駐留在內存,數據不是持久的,事件過後,如沒有保存數據,那麼數據就會丟失。使用場合:機器性能有限,尤其是在嵌入式環境,如android,極力推薦采用SAX進行解析XML文檔。
由於使用DOM方法需要將整個XML文檔加載內存中,對系統資源占用比較多,這對內存比較緊張的android系統來說,使用DOM方法讀取XML文檔會有很大的限制。通常使用SAX方法來讀取XML,這樣對內存資源的占用相對比較少,因此在嵌入式設備中極力推薦使用,android也不例外。
Android的服務開發中我們可能都是Activity和Service同進程處理,但想象過系統提供的各種ServiceManager嗎? 比如 SensorManage
最近因為因緣際會,看了好些與創新理論相關的書籍。其中創新理論權威、哈佛大學商學院教授克裡斯汀生所著《創新者的解答》一書,我個人認為頗有意思,尤其對於開放系統與封閉系
我首先從宏觀的角度觀察Binder,Service,Service Manager,並闡述各自的概念。從Linux的概念空間中,android的設計Activity托管
目前,android支持處理器情況:ARM+android 最早支持,支持的最完善,主要用在手機市場,目前積極進軍上網本、智能家居等市場;X86+Android 目前已