




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)畢業(yè)論文--基于Android平臺(tái)閱讀器的設(shè)計(jì)與開發(fā)摘要隨著3G時(shí)代的到來移動(dòng)用戶通過GPRS可以高速享受Intenet提供的服務(wù)本軟件通過Rss站點(diǎn)方便用戶迅速獲取感興趣的內(nèi)容本論文采用Android開源系統(tǒng)技術(shù)利用Java語(yǔ)言和Eclipse結(jié)合目前使用廣泛RssReallySimpleSyndication以及目前的解析和分析工具AndroidRSSHtmlParserHTML閱讀器DesignandDevelopmentofRSSReaderBasedonAndroidPlatformAbstractInpacewiththecomingof3GtimetheconsumersofChinaMobilecanenjoytheserviceprovidedbytheInternetinahighspeedviaGPRSItscontinentforconsumerstogetthecontentrapidlyinwhichtheyareinterestedthroughtheRSSinthissoftwareThepaperadoptstheAndroidopensourcesystemtakesadvantageofJavalanguageandEclipseandalsocombinesthewidelyusedRssReallySimpleSyndicationandHtmlParserwhichisthebest6>htmlanalysetoolpresentlytocompiletotheRssreaderWhatmakesthesoftwareoutoftheordinaryisthatitusesHtmlParsetoanalysethehtmldocumentfilesinordertogettheappointedcontentandcutdowntheflowonGPRSaswellasThesoftwaremakesuseofallkindsofgroupwaresofferedbytheAndroidtodesigntheinterfacesothatitmakestheconsumersexperiencewellKeywordsandroidrsshtmlParserhtmlreader 目錄第一章緒論 411課題的研究意義 412相近研究課題的特點(diǎn)及優(yōu)缺點(diǎn)分析 413本文的主要工作 5第二章Android的架構(gòu)分析 521Android特征 522Android架構(gòu) 6com關(guān)鍵應(yīng)用程序 7com應(yīng)用程序框架 7comCC函數(shù)庫(kù) 7comJava程序運(yùn)行環(huán)境 7comLinux內(nèi)核 723Android應(yīng)用的構(gòu)成和工作機(jī)制 7comActivity 8comIntentReceiver 9comService 9comContentProvider 10comRss解析剖析 1024本章小結(jié) 11第三章開發(fā)環(huán)境介紹及構(gòu)建 11第四章需求分析 1241功能需求 1242性能需求 1543數(shù)據(jù)需求 1644安全需求 16第五章Android數(shù)據(jù)庫(kù)的設(shè)計(jì) 1651數(shù)據(jù)庫(kù)及字段屬性設(shè)計(jì) 1752數(shù)據(jù)庫(kù)的連接 17com創(chuàng)建 17com數(shù)據(jù)庫(kù)操作 18第六章系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn) 1861Rss資源的收集和分析 1862系統(tǒng)界面的設(shè)計(jì) 22com主界面的實(shí)現(xiàn) 22com中子界面的實(shí)現(xiàn) 2363資源文件的解析 27comML文件的解析 27com件解析 2864數(shù)據(jù)存儲(chǔ) 31comSharedPerference 31comFile存儲(chǔ)方式 31comSQLiteDataBase數(shù)據(jù)庫(kù) 31comAndroid中Application的應(yīng)用 31com儲(chǔ)在項(xiàng)目中的應(yīng)用 3265內(nèi)容界面功能的實(shí)現(xiàn) 32第七章結(jié)論 33參考文獻(xiàn) 34第一章緒論3G網(wǎng)絡(luò)的使用移動(dòng)終端不再僅是通訊網(wǎng)絡(luò)的終端還將成為互聯(lián)網(wǎng)的終端隨著3G時(shí)代的到來上網(wǎng)越來越方便而網(wǎng)上充斥著各種各樣的信息讓網(wǎng)民們很頭疼很難找到自己感興趣的新聞而且中國(guó)流量費(fèi)用的高昂在眾多網(wǎng)頁(yè)中尋找自己感興趣的信息浪費(fèi)了過多沒必要損失的流量RSS為網(wǎng)民提供新聞標(biāo)題和摘要它的作用就像一道篩子為網(wǎng)民過濾了網(wǎng)站的大量無用信息使網(wǎng)民直達(dá)自己所需的網(wǎng)頁(yè)可通過RSS閱讀器進(jìn)行閱讀而不必每次到目標(biāo)網(wǎng)站去尋找最新信息提供RSS服務(wù)的網(wǎng)站可以節(jié)省用戶訪問目標(biāo)網(wǎng)站的時(shí)間便捷和主動(dòng)傳遞這正是RSS訂閱最有價(jià)值的地方RSS閱讀器基本可以分為三類第一類大多數(shù)閱讀器是運(yùn)行在計(jì)算機(jī)桌面上的通過所訂閱網(wǎng)站的新聞供應(yīng)可自動(dòng)定時(shí)地更新新聞標(biāo)題在該類閱讀器中有AwasuFeedDemon和RSSReader這三款流行的閱讀器都提供免費(fèi)試用版和付費(fèi)高級(jí)版國(guó)內(nèi)最近也推出了幾款RSS閱讀器周博通看天下博閱第二類新聞閱讀器通常是內(nèi)嵌于已在計(jì)算機(jī)中運(yùn)行的應(yīng)用程序中例如NewsGator內(nèi)嵌在微軟的Outlook中所訂閱的新聞標(biāo)題位于Outlook的收件箱文件夾中另外Pluck內(nèi)嵌在InternetExplorer瀏覽器中第三類則是在線的WEBRSS閱讀器其優(yōu)勢(shì)在于不需要安裝任何軟件就可以獲得RSS閱讀的便利并且可以保存閱讀狀態(tài)推薦和收藏自己感興趣的文章Android的特征架構(gòu)以及Android應(yīng)用的構(gòu)成和工作機(jī)制本文詳細(xì)的提出了軟件的架構(gòu)以及解析RSS方案采用Java開源的JAR包對(duì)HTML文件進(jìn)行分析和獲取圖片和文字信息對(duì)各個(gè)界面的布局和實(shí)現(xiàn)方式進(jìn)行詳細(xì)說明對(duì)數(shù)據(jù)庫(kù)設(shè)計(jì)模塊進(jìn)行了詳盡的需求分析經(jīng)分析得到數(shù)據(jù)庫(kù)設(shè)計(jì)模塊Android是一個(gè)移動(dòng)設(shè)備的軟件平臺(tái)是由LinuxJava構(gòu)成的開源軟件它提供包括SDKKeyAppsMiddlewareLinuxKernel四個(gè)部分在內(nèi)的全套軟件方案它開放了基于Linux內(nèi)核以上的開發(fā)工具從而保證了內(nèi)容的可移植性和多樣性Android平臺(tái)為我們開發(fā)應(yīng)用程序提供了一套很好的框架我們可以在這個(gè)平臺(tái)的基礎(chǔ)上開發(fā)不同的應(yīng)用程序也可以開發(fā)新的組件供應(yīng)用程序調(diào)用[1]21Android特征Dalvik虛擬Android采用的Java虛擬機(jī)是自主開發(fā)的代號(hào)為Dalvik的虛擬機(jī)技術(shù)在保證API方面兼容的同時(shí)Dalvik針對(duì)移動(dòng)進(jìn)行了大幅優(yōu)化占用資源更小運(yùn)行效率更高內(nèi)嵌瀏覽器基于開源的瀏覽器網(wǎng)頁(yè)排版引擎WebKit優(yōu)化的圖形強(qiáng)大的自定義二維圖形庫(kù)基于OpenGLES1.O標(biāo)準(zhǔn)的3D圖形功能在移動(dòng)3D開發(fā)中有著至關(guān)重要的地位SQLite數(shù)據(jù)庫(kù)SQLitet提供結(jié)構(gòu)化的數(shù)據(jù)存儲(chǔ)它是一款輕型免費(fèi)的且開源的數(shù)據(jù)庫(kù)它的設(shè)計(jì)目標(biāo)是嵌入式的它占用的資源非常低需要的內(nèi)存空間少處理速度比較快和支持事務(wù)處理功能等多媒體支持支持各種通用的音視頻和靜態(tài)圖像格式如MP3JPGPNG等OpenCore是Android多媒體框架的核心所有Android平臺(tái)的音視頻采集播放的操作都是通過它來實(shí)現(xiàn)的通過OpenCore程序員可以方便快速的開發(fā)出想要的多媒體應(yīng)用程序GSM技術(shù)依賴硬件GlobalSystemforMobileCommunications全球移動(dòng)通訊系統(tǒng)俗稱全球通是第二代移動(dòng)通信技術(shù)其開發(fā)El的是讓傘球各地可以共同使用一個(gè)移動(dòng)網(wǎng)絡(luò)標(biāo)準(zhǔn)讓用戶使_一部就能行遍全球藍(lán)牙EDGE3GandWiFi是一種短距離的無線連接技術(shù)在短距離內(nèi)可以實(shí)現(xiàn)話音和數(shù)據(jù)的無線傳輸EDGEEnhaIlcedDataRateforGSMEvolution是增強(qiáng)型數(shù)據(jù)速率GSM演進(jìn)技術(shù)CameraGPScompassandaccelerometer依賴硬件GPSGlobalPositioningSystemItTI馴全球定位系統(tǒng)它是一個(gè)由覆蓋全球的24顆1J星組成的衛(wèi)星系統(tǒng)Compass是個(gè)開放源代碼的JAVA搜索引擎框架強(qiáng)大的開發(fā)環(huán)境包括一個(gè)設(shè)備模擬器調(diào)試工具內(nèi)存和性能檢測(cè)以及EclipseIDE的開發(fā)插件Eclipse是個(gè)集成開發(fā)環(huán)境[2]22Android架構(gòu)Android的架構(gòu)是Linux內(nèi)核CC函數(shù)庫(kù)Dalvik虛擬機(jī)應(yīng)用框架以及關(guān)鍵應(yīng)用程序構(gòu)成的如圖2-1通過編譯基于框架的應(yīng)用程序可以降低開發(fā)負(fù)荷應(yīng)用軟件原則上是在DalvikVM上運(yùn)行的圖2-1Android架構(gòu)圖[3]com關(guān)鍵應(yīng)用程序Android平臺(tái)內(nèi)包含一些關(guān)鍵應(yīng)用程序如郵件收發(fā)客戶端程序短信收發(fā)程序日歷和網(wǎng)頁(yè)瀏覽器等開發(fā)者可以在其平臺(tái)上開發(fā)更多有特色的應(yīng)用程序開發(fā)語(yǔ)言是Javacom應(yīng)用程序框架Android應(yīng)用程序的開發(fā)基于框架和組件Android本身已在其框架中提高了許多的組件供應(yīng)用程序調(diào)用當(dāng)然開發(fā)者也開放新的組件并將組件放入應(yīng)用程序框架中以供自己和其它應(yīng)用程序調(diào)用comCC函數(shù)庫(kù)Android應(yīng)用程序框架之下是一套CC函數(shù)庫(kù)它們服務(wù)于Android應(yīng)用程序組件其功能通過組件間接提供給開發(fā)者這些函數(shù)庫(kù)包括標(biāo)準(zhǔn)C函數(shù)庫(kù)媒體功能庫(kù)瀏覽器引擎2D和3D圖形庫(kù)基于WEB應(yīng)用的的安全協(xié)議SSL用于點(diǎn)陣和矢量字體渲染的FreeType以及SQLite引擎等comJava程序運(yùn)行環(huán)境Android的Java程序運(yùn)行環(huán)境包含一組Java核心函數(shù)庫(kù)及Dalvik虛擬機(jī)它們有效地優(yōu)化了Java程序的運(yùn)行過程所有的Android應(yīng)用都運(yùn)行在它自己的進(jìn)程里該進(jìn)程是一個(gè)Dalvik虛擬機(jī)的實(shí)例Dalvik被設(shè)計(jì)成能在一臺(tái)設(shè)備上高效的運(yùn)行多個(gè)虛擬機(jī)實(shí)例Dalvik虛擬機(jī)的可執(zhí)行文件被封裝成Dalvik可執(zhí)行格式dex這是被優(yōu)化過的最小內(nèi)存依賴的格式Java編譯器dx工具將注冊(cè)了的和運(yùn)行時(shí)用到的類編譯成dex格式Dalvik虛擬機(jī)依賴于底層Linux內(nèi)核提供的功能如線程機(jī)制和內(nèi)存管理機(jī)制等comLinux內(nèi)核Android系統(tǒng)平臺(tái)是基于優(yōu)化了的Linux內(nèi)核是其系統(tǒng)平臺(tái)的核心它提供諸如內(nèi)存管理進(jìn)程管理設(shè)備驅(qū)動(dòng)等服務(wù)同時(shí)也是軟硬件的連接層提供了一個(gè)屏蔽層用于屏蔽硬件和上層軟件23Android應(yīng)用的構(gòu)成和工作機(jī)制對(duì)于一個(gè)Android應(yīng)用程序來說是由ActivityIntentReceiverServiceContentProvider四部分組成但并不是每一個(gè)Android應(yīng)用程序都必須由這四部分組成在應(yīng)用程序中使用時(shí)需要在配置文件AndroidMainfest.xml中進(jìn)行配置這個(gè)配置文件是每個(gè)Android應(yīng)用程序所必需的用于定義應(yīng)用程序的組件組件的功能以及必要條件等comActivityActivity是構(gòu)成應(yīng)用程序中最重要的構(gòu)造塊在Android應(yīng)用程序中幾乎都是通過Activity來與用戶進(jìn)行交互所以Activity主要負(fù)責(zé)的就是創(chuàng)建與用戶進(jìn)行交互的顯示窗口你可以在這些窗口里通過調(diào)用setContentViewView方法來顯示你自己的用戶界面活動(dòng)生命周期活動(dòng)Activity在系統(tǒng)中以活動(dòng)棧的形式進(jìn)行管理當(dāng)一個(gè)新的活動(dòng)啟動(dòng)后被放到了棧項(xiàng)成為了運(yùn)行活動(dòng)而新活動(dòng)之前的活動(dòng)在活動(dòng)棧里總位于新活動(dòng)之下直到新的活動(dòng)退出才重新回到前臺(tái)圖2-2Activity狀態(tài)變換路徑圖[4]從圖2-2可以看出Activity有三個(gè)關(guān)鍵的循環(huán)1活動(dòng)的整個(gè)生命期從首次調(diào)用onCreateBundle開始到最終調(diào)用onDestroyO結(jié)束在onCreate中進(jìn)行所有初始化在onDestroyO時(shí)進(jìn)行清理工作釋放資源2活動(dòng)的可見生命期從調(diào)用onStart開始到onStop被調(diào)用為止在這段時(shí)間內(nèi)即使活動(dòng)不與用戶進(jìn)行交互用戶也可以在屏幕上看到它在這兩個(gè)方法調(diào)用之間可以維護(hù)活動(dòng)顯示給用戶的資源onStart和onStop方法可以多次調(diào)用因?yàn)榛顒?dòng)隨時(shí)可以在可見和隱藏之間進(jìn)行轉(zhuǎn)換3活動(dòng)的后臺(tái)生命期從調(diào)用onResume開始到onPause被調(diào)用為止在這段時(shí)間內(nèi)活動(dòng)處于其它所有活動(dòng)之前并與用戶進(jìn)行交互一個(gè)活動(dòng)可以不斷在resumed狀態(tài)和paused狀態(tài)之間變換[4]活動(dòng)之間的切換Android使用了Intent類來實(shí)現(xiàn)活動(dòng)之間的切換工作Intent負(fù)責(zé)對(duì)應(yīng)用中一次操作的動(dòng)作動(dòng)作涉及的數(shù)據(jù)和附加數(shù)據(jù)進(jìn)行描述根據(jù)Intent的描述負(fù)責(zé)找到對(duì)應(yīng)的組件將Intent傳遞給調(diào)用的組件并完成組件的調(diào)用因此Intent起著一種媒體中介的作用專門提供組件互相調(diào)用的相關(guān)信息實(shí)現(xiàn)調(diào)用者與被調(diào)用者之間的解耦在應(yīng)用中我們可以以兩種形式來使用Intent直接Intent指定了component屬性的Intent通過指定具體的組件類通知應(yīng)用啟動(dòng)對(duì)應(yīng)的組件間接Intent沒有指定comonent屬性的Intent則需要包含足夠的信息這樣系統(tǒng)才能根據(jù)這些信息在所有的可用組件中確定滿足此Intent的組件comIntentReceiverIntentReceivert是用于對(duì)外部事件的響應(yīng)當(dāng)外部事件發(fā)生時(shí)會(huì)使用NotificationManager通知用戶當(dāng)一個(gè)IntentReceiver被觸發(fā)時(shí)系統(tǒng)會(huì)在需要的時(shí)候啟動(dòng)對(duì)應(yīng)的應(yīng)用程序如在本系統(tǒng)中當(dāng)用戶正在其它界面進(jìn)行操作時(shí)有好友發(fā)送消息過來就會(huì)以通知的形式發(fā)送到當(dāng)前界面的正上方來通知用戶各種應(yīng)用還可以通過使用Context.broadcastIntent將它們的IntentReceiver廣播給其它的應(yīng)用程序?qū)崿F(xiàn)應(yīng)用之間的通訊comServiceService是提供連續(xù)信息的應(yīng)用程序它是運(yùn)行于應(yīng)用程序后臺(tái)的服務(wù)在用戶進(jìn)行其它活動(dòng)的時(shí)候這個(gè)服務(wù)將一直運(yùn)行在基于Android平臺(tái)的即時(shí)通訊系統(tǒng)的研究與實(shí)現(xiàn)后臺(tái)直到用戶停止該服務(wù)或服務(wù)運(yùn)行結(jié)束本系統(tǒng)客戶端擴(kuò)展功能的音樂播放就是采用Service來進(jìn)行設(shè)計(jì)和開發(fā)的使用戶可以邊聊天邊聽音樂comContentProviderContentProvider應(yīng)用程序能夠?qū)⑺鼈兊臄?shù)據(jù)保存到文件SQL數(shù)據(jù)庫(kù)和其它的存儲(chǔ)設(shè)備中當(dāng)應(yīng)用程序需要使用存儲(chǔ)設(shè)備中的數(shù)據(jù)時(shí)可以使用ContentProvider來完成使用ContentProvider能夠靈活的替換底層使用的存儲(chǔ)設(shè)備使開發(fā)者可以專著于應(yīng)用邏輯的開發(fā)不用考慮底層存儲(chǔ)設(shè)備的細(xì)節(jié)從而使應(yīng)用系統(tǒng)具有良好的數(shù)據(jù)comRss解析剖析在Android平臺(tái)上可以使用SimpleAPIforXMLSAXDocumentObjectModelDOM和Android附帶的pull解析器解析XML文件使用SAX讀取XML文件SAX是一個(gè)解析速度快并且占用內(nèi)存少的解析器非常適合用于Android等移動(dòng)設(shè)備SAX解析XML文件采用的是事件驅(qū)動(dòng)也就是說它并不需要解析完整個(gè)文檔在按內(nèi)容順序解析文檔的過程中SAX會(huì)判斷當(dāng)前讀到的字符是否合法XML語(yǔ)法中的某部分如果符合就會(huì)觸發(fā)事件所謂事件其實(shí)就是一些回調(diào)callback方法這些方法事件定義在ContentHandler接口下面是一些ContentHandler接口常用的方法startDocument當(dāng)遇到文檔的開頭的時(shí)候調(diào)用這個(gè)方法可以在其中做一些預(yù)處理的工作endDocument和上面的方法相對(duì)應(yīng)當(dāng)文檔結(jié)束的時(shí)候調(diào)用這個(gè)方法可以在其中做一些善后的工作
startElementStringnamespaceURIStringlocalNameStringqNameAttributesatts當(dāng)讀到一個(gè)開始標(biāo)簽的時(shí)候會(huì)觸發(fā)這個(gè)方法namespaceURI就是命名空間localName是不帶命名空間前綴的標(biāo)簽名qName是帶命名空間前綴的標(biāo)簽名通過atts可以得到所有的屬性名和相應(yīng)的值要注意的是SAX中一個(gè)重要的特點(diǎn)就是它的流式處理當(dāng)遇到一個(gè)標(biāo)簽的時(shí)候它并不會(huì)紀(jì)錄下以前所碰到的標(biāo)簽也就是說在startElement方法中所有你所知道的信息就是標(biāo)簽的名字和屬性至于標(biāo)簽的嵌套結(jié)構(gòu)上層標(biāo)簽的名字是否有子元屬等等其它與結(jié)構(gòu)相關(guān)的信息都是不得而知的都需要你的程序來完成這使得SAX在編程處理上沒有DOM來得那么方便
endElementStringuriStringlocalNameStringname這個(gè)方法和上面的方法相對(duì)應(yīng)在遇到結(jié)束標(biāo)簽的時(shí)候調(diào)用這個(gè)方法
characterschar[]chintstartintlength這個(gè)方法用來處理在XML文件中讀到的內(nèi)容第一個(gè)參數(shù)用于存放文件的內(nèi)容后面兩個(gè)參數(shù)是讀到的字符串在這個(gè)數(shù)組中的起始位置和長(zhǎng)度使用newStringchstartlength就可以獲取內(nèi)容使用DOM讀取XML文件除了可以使用SAX解析XML文件大家也可以使用熟悉的DOM來解析XML文件DOM解析XML文件時(shí)會(huì)將XML文件的所有內(nèi)容讀取到內(nèi)存中然后允許您使用DOMAPI遍歷XML樹檢索所需的數(shù)據(jù)使用DOM操作XML的代碼看起來比較直觀并且在某些方面比基于SAX的實(shí)現(xiàn)更加簡(jiǎn)單但是因?yàn)镈OM需要將XML文件的所有內(nèi)容讀取到內(nèi)存中所以內(nèi)存的消耗比較大特別對(duì)于運(yùn)行Android的移動(dòng)設(shè)備來說因?yàn)樵O(shè)備的資源比較寶貴所以建議還是采用SAX來解析XML文件當(dāng)然如果XML文件的內(nèi)容比較小采用DOM是可行的使用Pull解析器讀取XML文件除了可以使用SAX和DOM解析XML文件大家也可以使用Android內(nèi)置的Pull解析器解析XML文件Pull解析器的運(yùn)行方式與SAX解析器相似它提供了類似的事件如開始元素和結(jié)束元素事件使用parsernext可以進(jìn)入下一個(gè)元素并觸發(fā)相應(yīng)事件事件將作為數(shù)值代碼被發(fā)送因此可以使用一個(gè)switch對(duì)感興趣的事件進(jìn)行處理當(dāng)元素開始解析時(shí)調(diào)用parsernextText方法可以獲取下一個(gè)Text類型元素的值A(chǔ)ndroid平臺(tái)的特征架構(gòu)以及Android應(yīng)用的構(gòu)成和工作機(jī)制進(jìn)行了詳細(xì)的分析對(duì)于Android應(yīng)用程序來說主要由ActivityIntentReceiverService和ContentProvider四部分組成但并不是對(duì)于每一個(gè)應(yīng)用程序這四部分都是必須的Activity是應(yīng)用程序中最重要的一種構(gòu)造塊我們對(duì)其進(jìn)行了詳細(xì)的分析包括Activity的生命周期以及Activity之間的切換第三章開發(fā)環(huán)境介紹及構(gòu)建Android平臺(tái)為開發(fā)者提供了源碼開放的軟件開發(fā)包SDK它包含了使用Java語(yǔ)言開發(fā)Android平臺(tái)應(yīng)用的必要工具和組件API進(jìn)行開發(fā)前先要建立合適的開發(fā)環(huán)境其中基于Java的整合型可擴(kuò)展平臺(tái)Eclipse是我們的首選搭建環(huán)境所需要的軟件操作系統(tǒng)WindowsXP或Linux軟件包AndroidSDKADTIDE環(huán)境EclipseIDEADTEclipse33以上JDKJavaRuntimeEnvironmcntJDK安裝步驟安裝JDK然后配置環(huán)境變量安裝EclipseAndroidSDK配置安裝develcomnyudnetsdkindexhtml下載選擇相應(yīng)的系統(tǒng)進(jìn)行安裝安裝AndroidADT插件1打開Eclipse在導(dǎo)航菜單中選擇Help-InstallNewSoftware在workwith中輸入sdl-comandroideclipseADD然后輸入name隨便取個(gè)有意義的都選中安裝完畢后重啟Eclipse在Eclipse里配置SDK路徑選擇Windows-Preferences-Android選擇AndroidSDK的位置圖4-2主界面用例圖圖4-3新浪Rss用例圖3騰訊Rss功能該功能與新浪Rss相似如圖4-4所示圖4-4騰訊Rss用用例圖4歷史記錄瀏覽功能記錄用戶瀏覽過的內(nèi)容以方便用戶再次查看這樣節(jié)省GPRS流量減少用戶的損失當(dāng)用戶不需要這些記錄的時(shí)候可以清除掉這些記錄如圖4-5所示5收藏功能當(dāng)用戶對(duì)一些文章感興趣時(shí)可以將其添加至收藏列表當(dāng)用戶不需要某條記錄是可將其從收藏列表中刪除如圖4-6所示6本地緩存在瀏覽新聞和文章的過程中會(huì)下載圖片和文字內(nèi)容將這些內(nèi)容保存值本地在下次瀏覽同樣的內(nèi)容的時(shí)候就不用再次鏈接網(wǎng)絡(luò)直接在本地讀取就可節(jié)省用戶的GPRS流量當(dāng)存儲(chǔ)空間不足時(shí)用戶可以選擇刪除這些本地緩存圖4-5瀏覽記錄用例圖圖4-6我的收藏用例圖7異步更新訪問網(wǎng)絡(luò)比較耗時(shí)間顯示一些提示信息向用戶表示本軟件正在運(yùn)行并異步加載數(shù)據(jù)更新UI界面42性能需求軟件要有良好的用戶體驗(yàn)良好的用戶體驗(yàn)體現(xiàn)在以下幾個(gè)方面1界面友好用戶界面要簡(jiǎn)潔直觀設(shè)計(jì)合理方便用戶操作讓用戶操作起來比較舒服并且UI視覺效應(yīng)好2快速響應(yīng)快速處理用戶的輸入或請(qǐng)求對(duì)于需要長(zhǎng)時(shí)間處理的部分在其處理時(shí)可以給用戶一個(gè)提示告知用戶該軟件正在運(yùn)行3無縫性一個(gè)常見的無縫問題就是一個(gè)應(yīng)用的后臺(tái)進(jìn)程如service或broadcastreceiver對(duì)某事件作出響應(yīng)而彈出對(duì)話框這看起來仿佛并無大礙特別是當(dāng)你在模擬器上單獨(dú)地構(gòu)建和測(cè)試你的應(yīng)用時(shí)然而當(dāng)你的應(yīng)用在真正的設(shè)備上運(yùn)行后臺(tái)線程顯示對(duì)話框時(shí)你的應(yīng)用當(dāng)時(shí)可能沒有獲得用戶焦點(diǎn)這就會(huì)出現(xiàn)你的應(yīng)用會(huì)在活動(dòng)的應(yīng)用后面顯示對(duì)話框或者從當(dāng)前應(yīng)用中獲得焦點(diǎn)并顯示對(duì)話框的情況而管論當(dāng)時(shí)用戶正在做什么如正在打等那樣的行為可能對(duì)你的應(yīng)用或用戶不起作用為了避免這些問題你的應(yīng)用應(yīng)該利用適當(dāng)?shù)南到y(tǒng)資源Notification類來通知用戶利用通知你的應(yīng)用可以通過在狀態(tài)條上顯示一個(gè)圖標(biāo)來通知用戶事件已經(jīng)發(fā)生而非獲得焦點(diǎn)和打斷用戶Mylove主要是存儲(chǔ)收藏的內(nèi)容history主要存儲(chǔ)歷史瀏覽記錄這兩個(gè)表的字段一樣下面介紹history的字段如表5-1所示字段說明id記錄的id號(hào)title內(nèi)容的標(biāo)題link內(nèi)容的URLbody內(nèi)容主體表5-1history字段表屬性 數(shù)據(jù)類型 允許空 主鍵 Id INTEGER NOTnull Primarykey Title TEXT Link TEXT Body TEXT Mylove與history相同就不重復(fù)介紹了52數(shù)據(jù)庫(kù)的連接這里將介紹如何進(jìn)行Android數(shù)據(jù)庫(kù)的連接Android中自帶的SQLite數(shù)據(jù)庫(kù)是十分小型的數(shù)據(jù)庫(kù)這樣正適合Android這種移動(dòng)平臺(tái)使用Android數(shù)據(jù)庫(kù)的存儲(chǔ)位置在datadatadatabases目錄下Android是利用ContentProvider作為內(nèi)容提供商SQLiteOpenHelper數(shù)據(jù)庫(kù)幫助類來進(jìn)行對(duì)數(shù)據(jù)庫(kù)的創(chuàng)建和操作通過ContextgetContentResolver方法直接對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作程序中數(shù)據(jù)庫(kù)的類為RssDBextendSQLiteOpenHelper繼承關(guān)系com創(chuàng)建Android提供了標(biāo)準(zhǔn)的數(shù)據(jù)庫(kù)創(chuàng)建方式繼承SQLiteOpenHelper實(shí)現(xiàn)onCreate和onUpgrade兩個(gè)方法有個(gè)好處就是便于數(shù)據(jù)庫(kù)版本的升級(jí)連接數(shù)據(jù)庫(kù)的算法如下 publicRssDBContextcontext創(chuàng)建數(shù)據(jù)庫(kù) supercontextDB_NAMEnullDB_VERTION publicvoidonCreateSQLiteDatabasedb 類創(chuàng)建是調(diào)用在這里主要?jiǎng)?chuàng)建table publicvoidonUpgradeSQLiteDatabasedbintoldVersionintnewVersion 版本升級(jí)時(shí)調(diào)用數(shù)據(jù)庫(kù)創(chuàng)建不成功會(huì)拋出FileNodFindException異常com數(shù)據(jù)庫(kù)操作打開數(shù)據(jù)庫(kù)操作dbthisgetWriteableDataBasethis表示RSSDB執(zhí)行sql語(yǔ)句dbexecSqlsql插入數(shù)據(jù)dbinsert刪除數(shù)據(jù)dbdelete更新數(shù)據(jù)dbupdate查詢數(shù)據(jù)dbquery當(dāng)執(zhí)行完這些操作后一定要關(guān)閉數(shù)據(jù)庫(kù)連接dbclose這些操作的具體使用方法可參照AndroidSDK第六章系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)61Rss資源的收集和分析目前有很多門戶網(wǎng)站支持Rss訂閱例如新浪騰訊搜狐百度等本軟件主要收集了新浪和騰訊的Rss站點(diǎn)例如新浪所提供的站點(diǎn)分為新聞中心體育新聞科技新聞財(cái)經(jīng)新聞軍事新聞等新聞中心中包括各個(gè)站點(diǎn)的鏈接例如新聞中心中的新聞要聞的Rss地址是comcnnewsmarqueeddtxml體育新聞中的國(guó)際足壇的Rss地址是comcnsportsglobalfocusxml新浪具體的Rss站點(diǎn)的詳細(xì)信息可參考這個(gè)鏈接comcnsportsindexshtml里面有詳細(xì)的分類和各分類的Rss地址騰訊的Rss站點(diǎn)和新浪的類似詳細(xì)信息可參考這個(gè)鏈接comindexshtmlRss有固定的格式截取新浪新聞的新聞要聞的部分內(nèi)容xmlversion"10"encoding"utf-8" [CDATA[[科技]中國(guó)互聯(lián)網(wǎng)5月批發(fā)IPO富豪與泡沫齊飛05051058]] comcomcnredirectphpurlcomcnchuangyesh2011-05-051XXXXXXXXXXshtml comCN comcomcnredirectphpurlcomcnchuangyesh2011-05-051XXXXXXXXXXshtml [CDATA[]] Thu5May2011025857GMT [CDATA[侯繼勇北京報(bào)道5月4日晚人人網(wǎng)在北京國(guó)貿(mào)三期地下一層中國(guó)大宴會(huì)廳舉行慶功宴除了人人網(wǎng)留守國(guó)內(nèi)的高管主要參會(huì)人員是媒體記者活動(dòng)已經(jīng)格式化有領(lǐng)導(dǎo)講話有晚宴有抽獎(jiǎng)最后是人人網(wǎng)創(chuàng)始人陳一舟的視頻連線――接受國(guó)內(nèi)媒體記者采訪卻會(huì)回避所有尖銳]] [CDATA[[科技]福布斯人人公司加入中國(guó)高價(jià)科技股俱樂部05051056]] comcomcnredirectphpurlcomcni2011-05-0500465481304shtml comCN comcomcnredirectphpurlcomcni2011-05-0500465481304shtml [CDATA[]] Thu5May2011025622GMT [CDATA[]] 如上接下來對(duì)這些內(nèi)容進(jìn)行分析xmlversion"10"encoding"utf-8"代表這個(gè)文件的數(shù)據(jù)格式這一般分為utf-8和gb2312每條信息在中包含這里面有很多節(jié)點(diǎn)每個(gè)節(jié)點(diǎn)的內(nèi)容有各自代表的信息Title代表標(biāo)題信息Link代表這篇文章的鏈接地址Author代表這篇文章的作者Guid與link相似代表這篇文章的鏈接Category代表這篇文章所屬類型pubDate代表這篇文章發(fā)布時(shí)間comments代表這篇文章的評(píng)論description代表這篇文章的簡(jiǎn)述綜合以上信息完成Rss閱讀不會(huì)有問題收集新浪和騰訊的這些Rss站點(diǎn)記錄在一個(gè)XML文件中用于程序的讀取和解析本軟件收集的內(nèi)容及格式以新浪為例部分內(nèi)容如下xmlversion"10"encoding"utf-8"newstitle"新聞中心" outlinetitle"新聞要聞"xmlUrl"comcnnewsmarqueeddtxml" flag"sina_ddt"encoding"utf-8" outlinetitle"國(guó)內(nèi)要聞"xmlUrl"comcnnewschinafocus15xml" flag"sina_ddt"encoding"utf-8" outlinetitle"國(guó)際要聞"xmlUrl"comcnnewsworldfocus15xml" flag"sina_ddt"encoding"utf-8" outlinetitle"社會(huì)新聞" xmlUrl"comcnnewssocietyfocus15xml"flag"sina_ddt" encoding"utf-8" outlinetitle"時(shí)政要聞" xmlUrl"comcnnewschinapolitics15xml"flag"sina_ddt" encoding"utf-8"其中title表示Rss的類型xmlUrl表示一個(gè)Rss地址連接encdoing表示Rss地址連接中的內(nèi)容的數(shù)據(jù)格式flag有特定的含義根據(jù)Rss地址連接獲取到的每條信息都有一個(gè)對(duì)應(yīng)的連接這個(gè)連接對(duì)應(yīng)的內(nèi)容用瀏覽器查看源文件可以發(fā)現(xiàn)我們所需要的內(nèi)容一般在一塊特定的區(qū)域中其他的信息我們都不需要而且那些信息很浪費(fèi)流量根據(jù)這塊特定的區(qū)域找出起始位置和結(jié)束位置注意這個(gè)起始和結(jié)束的位置在這個(gè)連接的源文件中必須是唯一的flag中的值就是起始和結(jié)束位置這個(gè)值對(duì)應(yīng)該項(xiàng)目中resvaluesarraysxml例如時(shí)政要聞對(duì)應(yīng)的flag是sina_ddtsina_ddt表示的內(nèi)容是arrayname"sina_ddt" stringsina_ddt_begin stringsina_ddt_end根據(jù)sina_ddt這個(gè)值就可以在代碼中解析出起始位置和結(jié)束位置然后根據(jù)這兩個(gè)位置就可以解析出我們需要的內(nèi)容62系統(tǒng)界面的設(shè)計(jì)com主界面的實(shí)現(xiàn)Android的每一個(gè)可視化界面都有其唯一的布局配置文件該文件中有各種布局的方式和各種資源文件如圖像文字顏色引用等程序在運(yùn)行時(shí)可以通過代碼對(duì)各個(gè)配置文件進(jìn)行讀取這樣可以形成不同的可視化界面和絢麗的效果該軟件的主界面是一個(gè)ActivityAndroid工程在啟動(dòng)每一個(gè)Activity時(shí)都會(huì)首先執(zhí)行onCreate方法如下publicvoidonCreateBundlesavedInstanceState superonCreatesavedInstanceState setContentViewcom_tabs該方法主要執(zhí)行界面的初始化操作Activity有個(gè)設(shè)置布局的方法setContentViewintid參數(shù)為資源ID該id在工程目錄reslayout下主界面的布局文件為main_tabs下面是該布局文件的結(jié)構(gòu)xmlversion"10"encoding"utf-8" 在線性布局中添加ViewFlipperViewFlipper可以用來指定FrameLayout內(nèi)多個(gè)View之間的切換效果可以一次指定也可以每次切換的時(shí)候都指定單獨(dú)的效果該類額外提供了如下幾個(gè)函數(shù)isFlipping用來判斷View切換是否正在進(jìn)行setFilpInterval設(shè)置View之間切換的時(shí)間間隔startFlipping使用上面設(shè)置的時(shí)間間隔來開始切換所有的View切換會(huì)循環(huán)進(jìn)行stopFlipping停止View切換horizontal此線性布局的子部件水平對(duì)齊Layout_heightfill_parent布局的高度為填滿父布局Layout_widthwap_content布局的寬度由子部件的寬度決定com中子界面的實(shí)現(xiàn)在主界面中實(shí)現(xiàn)四個(gè)界面的切換分別是我的收藏騰訊Rss新浪Rss和瀏覽記錄分別對(duì)應(yīng)的布局文件是rss_lovexml_mainxmlsina_mainxml和rss_historyxml這些文件的在工程的reslayout下我的收藏和瀏覽記錄界面的實(shí)現(xiàn)我的收藏和瀏覽記錄的界面類似布局文件中主要是ListView組件在Android開發(fā)中ListView是比較常用的組件它一列表的形式展示具體內(nèi)容并能根據(jù)數(shù)據(jù)的長(zhǎng)度自適應(yīng)顯示ListView需要一個(gè)適配器android自帶的一些適配器如SimplaAdapter顯示比較單一所以本軟件中繼承BaseAdapter通過對(duì)這個(gè)適配器的擴(kuò)展實(shí)現(xiàn)我們需要的效果擴(kuò)展成一行能顯示多個(gè)內(nèi)容由于BaseAdapter是一個(gè)抽象類我們需要實(shí)現(xiàn)里面的getView方法返回一個(gè)view即視圖視圖可以顯示在Activity上這樣就可以看到我們想要的界面ListView有一個(gè)監(jiān)聽器OnItemClickListner實(shí)現(xiàn)里面的方法就可以監(jiān)聽Touch事件當(dāng)手指點(diǎn)擊到每一行時(shí)可以通過ListViewgetItemPositionintpotion該行信息這樣就可以通過intent傳遞數(shù)據(jù)到其他的Activity本程序的思路是點(diǎn)擊某一行跳轉(zhuǎn)到另一個(gè)Activity顯示新聞的內(nèi)容如圖6-1和6-2所示圖6-1瀏覽記錄頁(yè)面圖圖6-2我的收藏界面圖騰訊Rss界面的實(shí)現(xiàn)這個(gè)界面為了更好的用戶體驗(yàn)使用了ExpandableListViewExpandableListView是Android中的手風(fēng)琴個(gè)人感覺效果相當(dāng)棒它是一個(gè)垂直滾動(dòng)的顯示兩個(gè)級(jí)別列表項(xiàng)的視圖如圖6-3所示類似二級(jí)菜單列表項(xiàng)來時(shí)ExpandableListAdapter點(diǎn)擊組可以單獨(dú)展開ExpandableListView的主要方法expandGroupintgroupPos在分組列表視圖中展開一組setSelectedGroupintgroupPosition設(shè)置選擇指定的組setSelectedChildintgroupPositionintchildPositionbooleanshouldExpandGroup設(shè)置選擇指定的子項(xiàng)getPackedPositionGrouplongpackedPosition返回所選擇的組getPackedPositionForChildintgroupPositionintchildPosition返回所選擇的子項(xiàng)getPackedPositionTypelongpackedPosition返回所選擇項(xiàng)的類型ChildGroupisGroupExpandedintgroupPosition判斷此組是否展開
圖6-3騰訊Rss圖新浪Rss界面的實(shí)現(xiàn)新浪Rss界面GridView圖6-4點(diǎn)擊新聞中心后ListView
Rss界面跟其他的都不同使用的是TabHost的組件TabHost可是實(shí)現(xiàn)在不同一屏幕內(nèi)不同界面的切換新浪Rss的布局文件在reslayout下其中最最主要得是TabHost的設(shè)置它的結(jié)構(gòu)如下 接下來詳細(xì)介紹這些組件的功能FrameLayout是單幀布局當(dāng)一個(gè)組件放在上面是下一個(gè)組件就覆蓋到第一個(gè)組件上可以通過調(diào)整位置來避免組件的覆蓋GridView是Android中的數(shù)據(jù)顯示控件在二維可滾動(dòng)的網(wǎng)格中呈現(xiàn)子項(xiàng)itemItme來自與之相關(guān)的LiatAdapterGridView也有一個(gè)監(jiān)聽器ONItemClickListener實(shí)現(xiàn)后可以對(duì)GridView組件中的子項(xiàng)進(jìn)行監(jiān)聽在本程序中用于顯示新浪Rss的類型數(shù)據(jù)源來自本地xml文件的解析將再后面介紹ListView前面已經(jīng)介紹過在這里主要用于顯示每種類型下的Rss地址連接TabWidget是用于切換第一個(gè)FrameLayout中的兩個(gè)組件在這里我們不需要讓它顯示設(shè)置它的屬性為不可見TabHost是用來管理FrameLayout下包含的組件這些組件必須先添加到TabHost中使用TabHostTabSpac來定義每次切換的視圖通過TabHostaddTab來添加TabSpac然后通過TabHostsetCurrentTab就可以切換不同的視圖63資源文件的解析文件解析是本項(xiàng)目中的一個(gè)重點(diǎn)主要包括本地文件的解析和網(wǎng)絡(luò)文件的解析本地文件主要是XML文件如_newsxml網(wǎng)絡(luò)文件的解析主要是通過數(shù)據(jù)流來讀取資源包括HTML文件的解析XML文件的解析圖片資源的獲取等comML文件的解析XML文件的解析方式在前面已經(jīng)介紹過在這里使用pull解析器在解析之前先構(gòu)建XmlPullParserFactory然后根據(jù)XmlPullParserFactorynewPullParser獲取XmlPullParser調(diào)用XmlPullParsersetInputInputStreaminputStringencoding來裝載XML文件變量encoding表示字符編碼默認(rèn)是utf-8Pull讀到XML文件的聲明返回?cái)?shù)字0對(duì)應(yīng)XmlPullParserSTART_DOCUMENTPull讀到XML的結(jié)束返回?cái)?shù)字1對(duì)應(yīng)XmlPullParserEND_DOCUMENTPull讀到XML的開始標(biāo)簽返回?cái)?shù)字2對(duì)應(yīng)XmlPullParserSTART_TAGPull讀到XML的結(jié)束標(biāo)簽返回?cái)?shù)字3對(duì)應(yīng)XmlPullParserEND_TAGPull讀到XML的文本返回?cái)?shù)字4對(duì)應(yīng)XmlPullParserTEXT使用pull解析器來解析sina_rssxml根據(jù)上面返回?cái)?shù)字來進(jìn)行判斷當(dāng)讀取到的開始標(biāo)簽是outline時(shí)調(diào)用XmlPullParsergetAttributeValueintindex來獲取標(biāo)簽內(nèi)的值如XmlPullParsergetAttributeValue0獲取的是title的值在解析XML文件時(shí)其中有個(gè)屬性是flag這個(gè)屬性對(duì)應(yīng)的值在之前介紹過對(duì)應(yīng)的是html文件的起始位置和結(jié)束位置flag屬性的值在resvaluesarrayxml中在Android項(xiàng)目中arrayxml文件中的array標(biāo)簽的屬性name與flag屬性的值對(duì)應(yīng)但是在Android中name被自動(dòng)生成一個(gè)整數(shù)對(duì)應(yīng)的文件在項(xiàng)目的gen文件夾中的Rjava中在Android中根據(jù)ResourcegetStringArrayintid獲取name所對(duì)應(yīng)的值并沒有提供根據(jù)字符串來獲取在Java運(yùn)行時(shí)環(huán)境中對(duì)于任意一個(gè)類能否知道這個(gè)類有哪些屬性和方法對(duì)于任意一個(gè)對(duì)象能否調(diào)用它的任意一個(gè)方法答案是肯定的這種動(dòng)態(tài)獲取類的信息以及動(dòng)態(tài)調(diào)用對(duì)象的方法的功能來自于Java語(yǔ)言的反射Reflection機(jī)制Java反射機(jī)制主要提供了以下功能在運(yùn)行時(shí)判斷任意一個(gè)對(duì)象所屬的類
在運(yùn)行時(shí)構(gòu)造任意一個(gè)類的對(duì)象
在運(yùn)行時(shí)判斷任意一個(gè)類所具有的成員變量和方法
在運(yùn)行時(shí)調(diào)用任意一個(gè)對(duì)象的方法
生成動(dòng)態(tài)代理在Android上系統(tǒng)通過向用戶顯示一個(gè)稱為應(yīng)用無響應(yīng)ANRApplicationNotResponding的對(duì)話框來防止在一段時(shí)間內(nèi)響應(yīng)不夠快tmlParser是一個(gè)純的ava寫的解析的庫(kù)它不依賴于其它的ava庫(kù)文件主要用于改造或提取它能超高速解析而且不會(huì)出錯(cuò)現(xiàn)在tmlparser最新版本為20HtmlParser基本功能信息提取·文本信息抽取例如對(duì)HTML進(jìn)行有效信息搜索·鏈接提取用于自動(dòng)給頁(yè)面的鏈接文本加上鏈接的標(biāo)簽·資源提取例如對(duì)一些圖片聲音的資源的處理·鏈接檢查用于檢查HTML中的鏈接是否有效·頁(yè)面內(nèi)容的監(jiān)控信息轉(zhuǎn)換·鏈接重寫用于修改頁(yè)面中的所有超鏈接·網(wǎng)頁(yè)內(nèi)容拷貝用于將網(wǎng)頁(yè)內(nèi)容保存到本地·內(nèi)容檢驗(yàn)可以用來過濾網(wǎng)頁(yè)上一些令人不愉快的字詞·HTML信息清洗把本來亂七八糟的HTML信息格式化HTML文件中我們解析的內(nèi)容有時(shí)候有圖片這樣就需要讀取圖片資源并將其轉(zhuǎn)化成Drawable將讀取到的圖片連接轉(zhuǎn)換成Url調(diào)用UrlopenConnection獲取網(wǎng)絡(luò)連接根據(jù)這個(gè)連接打開數(shù)據(jù)讀取流調(diào)用UrlConnectiongetInputStream調(diào)用DrawablecreateFromStreamInputStreaminputStringsrcName將讀取流轉(zhuǎn)換成Drawable在顯示內(nèi)容的時(shí)候調(diào)用64數(shù)據(jù)存儲(chǔ)在軟件正常運(yùn)行時(shí)由于各個(gè)界面的切換為了數(shù)據(jù)的共享和防止數(shù)據(jù)的丟失我們需要將一些數(shù)據(jù)進(jìn)行臨時(shí)存儲(chǔ)或者永久存儲(chǔ)Android作為一種操作系統(tǒng)提供了如下幾種數(shù)據(jù)存儲(chǔ)的方式PreferenceFileSQLite數(shù)據(jù)和網(wǎng)絡(luò)comSharedPerferencePerference提供了一種輕量級(jí)的數(shù)據(jù)存儲(chǔ)方式一般數(shù)據(jù)比較少一些簡(jiǎn)單的配置信息它以鍵-值對(duì)的方式將數(shù)據(jù)保存在一個(gè)XML文件中使用的接口詳細(xì)內(nèi)容見文檔androidcontentSharedPerference提供了數(shù)據(jù)的獲取方法androidcontentSharedPerferenceEditor提供了數(shù)據(jù)的保存方法comFile存儲(chǔ)方式我們可以將一些數(shù)據(jù)以文件的形式保存在設(shè)備中例如文本音頻圖片等Android提供了文件讀取的方法ContextgetFileInputStream獲取標(biāo)準(zhǔn)java文件的文件輸入流FileInputStreamContextgetFileoutStream獲取標(biāo)準(zhǔn)Java文件的文件輸出流FileOutStreamcomSQLiteDataBase數(shù)據(jù)庫(kù)Android操作系統(tǒng)中內(nèi)置了SQLite數(shù)據(jù)庫(kù)SQLite是一個(gè)嵌入式數(shù)據(jù)庫(kù)引擎針對(duì)內(nèi)存資源有限的設(shè)備如PDAMP3提供的一種高效的數(shù)據(jù)引擎SQLite數(shù)據(jù)庫(kù)不像其他的數(shù)據(jù)庫(kù)如Orcale它沒有服務(wù)進(jìn)程基于其自身的先天優(yōu)勢(shì)SQLite在嵌入式領(lǐng)域得到廣泛的應(yīng)用SQLite的使用方法在參照數(shù)據(jù)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 中國(guó)高溫工業(yè)熱泵行業(yè)市場(chǎng)運(yùn)行態(tài)勢(shì)與投資戰(zhàn)略咨詢報(bào)告
- 信用墊付合同范本
- 企業(yè)代理意向合同范本
- 科技前沿從數(shù)據(jù)分析看未來行業(yè)趨勢(shì)
- 個(gè)人購(gòu)房協(xié)議合同范本
- 2025年中性施膠淀粉項(xiàng)目投資可行性研究分析報(bào)告
- 拜師儀式徒弟發(fā)言稿5篇
- 高壓汞燈泡行業(yè)深度研究報(bào)告
- 冰雪服裝供貨合同范本
- 兒童合同范本模板
- 車站信號(hào)自動(dòng)控制(第二版) 課件 -3-6502部分
- 商會(huì)2025年工作計(jì)劃
- 《安全生產(chǎn)法》2024版
- 《消費(fèi)者心理與行為分析》第五版 課件全套 肖澗松 單元1-10 消費(fèi)者心理與行為概述 - 消費(fèi)者購(gòu)買決策與購(gòu)后行為
- 《會(huì)展概述》課件
- 體檢報(bào)告電子版
- 2024年中考語(yǔ)文真題分類匯編(全國(guó)版)專題12議論文閱讀(第01期)含答案及解析
- 七年級(jí)下冊(cè)心理健康教育教學(xué)設(shè)計(jì)
- 食堂清洗及消毒制度
- 服裝質(zhì)量管理制度
- 自然辯證法概論:第四章-馬克思主義科學(xué)技術(shù)社會(huì)論
評(píng)論
0/150
提交評(píng)論