![Android平臺的RSS閱讀器開發(fā)和設計_第1頁](http://file4.renrendoc.com/view/d5cdda59985ed6b9aca8e558f9b35713/d5cdda59985ed6b9aca8e558f9b357131.gif)
![Android平臺的RSS閱讀器開發(fā)和設計_第2頁](http://file4.renrendoc.com/view/d5cdda59985ed6b9aca8e558f9b35713/d5cdda59985ed6b9aca8e558f9b357132.gif)
![Android平臺的RSS閱讀器開發(fā)和設計_第3頁](http://file4.renrendoc.com/view/d5cdda59985ed6b9aca8e558f9b35713/d5cdda59985ed6b9aca8e558f9b357133.gif)
![Android平臺的RSS閱讀器開發(fā)和設計_第4頁](http://file4.renrendoc.com/view/d5cdda59985ed6b9aca8e558f9b35713/d5cdda59985ed6b9aca8e558f9b357134.gif)
![Android平臺的RSS閱讀器開發(fā)和設計_第5頁](http://file4.renrendoc.com/view/d5cdda59985ed6b9aca8e558f9b35713/d5cdda59985ed6b9aca8e558f9b357135.gif)
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
...wd......wd......wd...摘要在科技日益興旺的今天,社會競爭越來越劇烈,這要求人們不斷的獲取信息來充實自己。這就要求人們能隨時隨地的了解并獲取所需的信息。與此同時,手機的功能越來越強大,將脫離傳統(tǒng)的打、發(fā)短信等根本的功能,在這種情況下,新聞閱讀器可以滿足人們對外界信息了解的需求。本系統(tǒng)是在Android平臺下設計的,在GoogleAndroid平臺的SDK2.1環(huán)境下,運用Eclipse進展開發(fā)。論文概括的介紹了Android開發(fā)的流程,并重點的介紹了基于Android平臺的RSS閱讀器的開發(fā)過程。論文首先介紹了課題的研究背景、研究現(xiàn)狀和主要研究內(nèi)容;然后對系統(tǒng)中用到的理論知識和相關技術進展了詳細的闡述,包括Android平臺的相關理論知識、Android環(huán)境的搭建、數(shù)據(jù)源的選取、數(shù)據(jù)的解析方法以及系統(tǒng)的詳細實現(xiàn)過程。系統(tǒng)選用了新浪RSS源以及pull解析方法。系統(tǒng)完成以后,可以實現(xiàn)RSS閱讀器的根本功能,論文闡述了具體實現(xiàn)方法以及相應的關鍵代碼段。本課題完成設計實現(xiàn)的系統(tǒng)已經(jīng)試運行正常。用戶使用該系統(tǒng)可以方便、及時的閱讀到自己感興趣的新聞關鍵詞:RSS閱讀器,Android操作系統(tǒng),Pull解析算法AbstractIt'smoreadvancedintechnologytoday,andthesocialcompetitionismoreandmorefierce,whichrequiresconstantaccesstoinformationtopeopletoenrichthemselves.Atthesametime,mobilephonesbecomemoreandmorepowerful,willbreakawayfromtraditionalphonecalls,sendingmessagesandotherbasicfunctions.Inthiscase,thenewsreaderistomeetthepeople'sunderstandingoftheneedsofoutsideinformation.ThissystemisdesignedintheAndroidplatform,comeswiththeGoogleAndroidPlatformSDK2.1environment,theuseofEclipsefordevelopment.ThispaperdescribesthegeneralprocessofAndroiddevelopment,andfocusontheintroductionoftheAndroidplatform-basedRSSreaderdevelopmentprocess.Thispaperintroducestheresearchbackground,currentsituationandmaincontent;andthendescribesthetheoreticalknowledgeandrelatedtechnologiesusedinthesystemindetail,includingthetheoryofAndroidplatform,buildingAndroidenvironment,theselectionofdatasources,dataanalyticalmethodsandthedetailedimplementationprocess.ThesystemselectsSinaRSSsourceandPullparsingmethod.Aftercompletingthesystem,youcanachievethebasicfunctionsofRSSReader,thepaperdescribesthespecificimplementationmethodandthecorrespondingkeycode.Thedesignandimplementationofthesystemhasbeentestrunnormally.Userscaneasilyusethesystem,readtimelynewsofpersonalinterest.Keywords:RSSreader,AndroidOperatingSystem,Pullparsingmethod目錄TOC\o"1-2"\h\z\u摘要IAbstractII1緒論11.1課題背景11.2課題研究的目的和意義21.3研究現(xiàn)狀32Android相關理論知識62.1Android平臺介紹62.2Android開發(fā)環(huán)境的搭建143相關技術理論193.1RSS技術簡介193.2Pull解析算法研究204Android平臺下RSS閱讀器的詳細分析設計與實現(xiàn)224.1問題的提出224.2解決方案234.3主要功能詳細設計與實現(xiàn)245總結(jié)與展望395.1本文工作總結(jié)395.2下一步工作展望39致謝40參考文獻41緒論課題背景現(xiàn)在手機已經(jīng)成為了人們生活中不可或缺的通訊設備,沒有手機有時會讓人覺得寸步難行。手機將脫離傳統(tǒng)的打、發(fā)短信等根本的功能,而基于智能手機強大的處理能力和可擴展能力以及3G網(wǎng)絡高速數(shù)據(jù)傳輸,越來越多的功能和業(yè)務將被開發(fā)出來并大規(guī)模的應用。正因為如此,當全世界的目光聚焦的時候,Google于2007年11月5日宣布推出基于Linux平臺的開源手機操作系統(tǒng),號稱首個為移動終端打造的真正開發(fā)和完整的移動軟件——Android。Android是基于Linux內(nèi)核的軟件平臺和操作系統(tǒng),早期由Google開發(fā),后由開放手機聯(lián)盟〔OpenHandsetAlliance〕開發(fā)。它采用了軟件層(softwarestack,又名以軟件疊層)的構(gòu)架,主要分為三局部。底層以Linux內(nèi)核作為根基,由C語言開發(fā),只提供根基功能。中間層包括函數(shù)庫Library和虛擬機VirtualMachine,由C++開發(fā)。最上層是各種應用軟件,包括通話程序,短信程序等,應用軟件則由各公司自行開發(fā),由Java編寫。Android不僅僅只是一個操作系統(tǒng),它包括了:1、經(jīng)過Google剪裁和調(diào)優(yōu)的LinuxKernel,對于掌上設備的硬件提供了很好的支持。Google在Linux方面的應用能力不容置疑,Google公司幾乎所有的幾十萬服務器全部是自己修改正的Linux操作系統(tǒng)。2、經(jīng)過Google修改的Java虛擬機Dalvik,是基于ApacheHarmony虛擬機版本進展改進而來,能夠提供極高的執(zhí)行性能。有了Java虛擬機,大局部Java核心類庫都已經(jīng)可以直接運行。3、大量立即可用的類庫和應用軟件,例如瀏覽器Webkit,數(shù)據(jù)庫SQLite,讓你可輕易開發(fā)出來媲美于桌面應用復雜度的手機軟件。4、Google已經(jīng)開發(fā)好了大量現(xiàn)成的應用軟件,同時可以直接使用Google很多在線服務。5、Google提供了基于Eclipse的完整開發(fā)環(huán)境、模擬器、文檔、幫助、例如等將極大推動Android快速的推廣和開展?;贏ndroid眾多的優(yōu)點,圍繞Android形成了一個移動手機聯(lián)盟,主要的手機廠商幾乎全部在列,而此聯(lián)盟在極大的推動Android平臺的推廣和開展,在未來的幾年必將大方異彩,將極大的推動整個手機操作系統(tǒng)甚至是互聯(lián)網(wǎng)乃至軟件行業(yè)的開展。課題研究的目的和意義Android這個平臺對于Google對于群眾的意義不在于手機本身,Android存在的目的也不在于挑起手機操作系統(tǒng)之間的混戰(zhàn),而在于推動移動互聯(lián)網(wǎng)產(chǎn)業(yè)鏈的迅速成型。具有開源特性的Android平臺打破了之前Symbian、windowsmobile等操作系統(tǒng)收取高額的授權費用的模式,使得只能手機本錢大大的降低;而正是由于它開發(fā)源代碼,使得手機產(chǎn)生更多個性化的應用。同時,合作方能夠在這里得到利潤或者創(chuàng)造價值,手機軟件行業(yè)得到維護協(xié)調(diào)開展。以Google、蘋果和諾基亞為中心各自形成的生態(tài)鏈將以原來數(shù)倍的速度推動移動互聯(lián)網(wǎng)的開展,這正是Google推出Android平臺的意義,也是Android平臺存在的使命。而作為Android平臺成員之一的中國移動也投資成立了一家通訊公司,專門從事Google手機軟件的應用以及本地化的軟件的開發(fā),比方將在Google手機平臺上添加飛信、輸入法等一系列符合國內(nèi)用戶使用特色的功能。國內(nèi)眾多企業(yè)也將眼光投入到Android上面,并啟動了相關的方案來深入的理解并開展Android。更多的手機軟件開發(fā)企業(yè)已經(jīng)或者籌備著將公司進展轉(zhuǎn)型,從其方向的開發(fā)轉(zhuǎn)向到Android的開發(fā)。綜上所述,無論是在國內(nèi)還是在國外,Android平臺對手機軟件行業(yè)和移動手機平臺將發(fā)揮極大地推動作用,而在未來的幾年或者一段時間內(nèi),Android將越發(fā)的凸顯自己的重要性?;诖耍覀冇斜匾ㄟ^進展相關的研究來了解Android平臺,來了解開發(fā)Android的那一大批人的先進的理念和思想,并通過這些來了解手機軟件行業(yè),進而了解未來無移動互聯(lián)網(wǎng)的開展趨勢,從而更好的適應時代的需要。研究現(xiàn)狀本節(jié)對各大站點對RSS的支持情況以及現(xiàn)有RSS閱讀器進展了分析和綜合,提出了系統(tǒng)實現(xiàn)可以借鑒的地方。各種站點對RSS的支持情況目前支持RSS的站點主要分為下面幾種:新聞資訊類站點、BSP站點、獨立博客站點、其他站點。新聞資訊類站點指的是傳統(tǒng)的門戶網(wǎng)站,這類門戶網(wǎng)站一般是站長管理式的,信息涉及非常廣泛、來源比擬集中、權威性比擬高,一直受到傳統(tǒng)互聯(lián)網(wǎng)用戶的青睞。用戶可以從這一類網(wǎng)站了解到各種需要的綜合信息。幾大典型的例子有新浪門戶、搜狐門戶和騰訊門戶等等。為了迎合用戶的需要這類網(wǎng)站一般也有推出RSS訂閱功能,這類網(wǎng)站的信息更新非常頻繁、信息量也比擬巨大,因此,用戶不怎么傾向于訂閱此類網(wǎng)站。BSP站點,即Blogserviceprovider〔博客服務提供商〕,這類站點為用戶提供博客服務,除了提供根本的博客添加、評論之外,大局部BSP都會針對某個博客提供RSS訂閱功能。比方新浪博客和博客園等等。這類網(wǎng)站在RSS信息更新方面的特點是:更新相對不頻繁、也不規(guī)律。但是用戶比擬傾向于訂閱這類網(wǎng)站,因為許多博客的話題是針對某一特定領域的,而用戶的閱讀傾向往往也是針對某一領域的。獨立博客站點,指的是博主自己申請域名,自己開通并且自己維護的博客。這類博客站點一般使用已有的博客系統(tǒng)〔比方wordpress〕,而這些博客系統(tǒng)一般都會提供RSS訂閱功能。在信息方面,獨立博客一直是IT從業(yè)人員比擬青睞的網(wǎng)站,比方月光博客、小眾軟件等等。在國外,這一類博客站點更加流行。其他站點,指的是迎合用戶特殊需求的站點。這類站點提供了某些定期更新的特殊信息,比方天氣預報信息,學校就業(yè)信息,學院通知信息。這類信息不適合所有用戶,但就算如此,提供RSS訂閱服務能使得關心它的用戶一勞永逸。這類信息更新的頻繁度往往沒有什么規(guī)律。對RSS源站點信息,我們總結(jié)如表1.1所示:表SEQ表格\*ARABIC1.1各種RSS源網(wǎng)站情況比照RSS源站點用戶群體RSS支持程度更新頻繁程度新聞門戶群眾用戶一般頻繁BSP站點專注某個領域的用戶好不頻繁獨立博客站點專業(yè)用戶非常好不頻繁其他站點具有特殊需求的用戶不好不確定移動閱讀器實現(xiàn)方案離線閱讀器離線RSS閱讀器主要指的是用一個客戶端軟件進展RSS閱讀,例如瀏覽器自帶的RSS閱讀,以及桌面RSS閱讀器。這類閱讀器的主要優(yōu)點是:〔1〕通過本地緩存將內(nèi)容呈現(xiàn)給用戶,使得RSS閱讀不受網(wǎng)絡影響?!?〕響應速度快,加載速度快。它的主要缺點是:〔1〕RSS信息的獲取由客戶端完成,增加了客戶端的處理負擔。〔2〕由于訂閱信息都在本地,因此不便于用戶轉(zhuǎn)移數(shù)據(jù)。對手機來說,計算能力和內(nèi)存空間屬于稀缺資源,因此離線RSS閱讀器實現(xiàn)方案并不適合手機。此外,離線閱讀器的實現(xiàn)方案和互聯(lián)網(wǎng)的開展趨勢也是背道而馳的。在線閱讀器在線閱讀器大多是通過瀏覽器訪問的一類閱讀器,對于在線閱讀器來說,各個訂閱網(wǎng)站信息的獲取是由提供服務的一方完成的,客戶端只負責接收服務端返回的數(shù)據(jù)并且正確顯示。在線閱讀器的特點是依靠網(wǎng)絡、極大化的減輕客戶端的負擔、便于用戶在不同客戶端使用軟件及其數(shù)據(jù)等等。隨著web2.0的開展,一些在線RSS閱讀器已經(jīng)進入人們的視野,典型的范例有Google閱讀器、鮮果網(wǎng)、抓蝦網(wǎng)和哪吒網(wǎng),這些網(wǎng)站也相繼都推出了各自的手機版。這些手機版的RSS閱讀器都是我們需要借鑒的。但是,對普通用戶來說,RSS是個比擬難以理解的東西〔尤其是在國內(nèi)〕,因此這類手機閱讀器的普及是個重大難題,我們的工作重點,就是屏蔽RSS閱讀器的技術細節(jié),給用戶提供直觀的、全面的、易懂的服務。Android相關理論知識Android平臺介紹Android系統(tǒng)簡介Android一詞的本義指“機器人〞,同時也是Google于2007年11月5日宣布的基于Linux平臺的開源手機操作系統(tǒng)的名稱。它包括操作系統(tǒng)、用戶界面和應用程序——移動工作所需的全部軟件,而且不存在任何以往阻礙移動產(chǎn)業(yè)創(chuàng)新的專有權障礙。Googleandroid平臺的系統(tǒng)構(gòu)架圖如圖2.1所示:圖2.1Googleandroid平臺的系統(tǒng)構(gòu)架圖雖然Android是Google公司推出的產(chǎn)品,但更貼切的說法應該是開放手機聯(lián)盟的產(chǎn)品。開放手機聯(lián)盟是由大約30家公司組成的聯(lián)盟,致力于將“更好的〞和“開放的〞手機推向市場。其網(wǎng)站上的一句話很好的闡述了這一點:“Android是本著成為第一個開放、完整、免費、專門針對移動設備開發(fā)的平臺這一目標,完全從零開場創(chuàng)立的。〞Android系統(tǒng)架構(gòu)應用程序Android以Java為編程語言,從接口到功能,都有層出不窮的變化,其中Activity等同于J2ME的MIDlet,一個Activity類〔class〕負責創(chuàng)立視窗〔window〕,一個活動中的Activity就是在foreground〔前景〕模式,背景運行的程序叫做Service。兩者之間通過由ServiceConnection和AIDL連結(jié),到達復數(shù)程序同時運行的效果。如果運行中的Activity全部畫面被其他Activity取代時,該Activity便被停頓〔stopped〕,甚至被系統(tǒng)去除〔kill〕。View等同于J2ME的Displayable,程序人員可以通過View類與“XMLlayout〞檔將UI放置在視窗上,Android1.5的版本可以利用View打造出所謂的Widgets,其實Widget只是View的一種,所以可以使用xml來設計layout,HTC的AndroidHero手機即含有大量的widget。至于ViewGroup是各種layout的根基抽象類〔abstractclass〕,ViewGroup之內(nèi)還可以有ViewGroup。View的構(gòu)造函數(shù)不需要再Activity中調(diào)用,但是Displayable的是必須的,在Activity中,要通過findViewById()來從XML中取得View,Android的View類的顯示很大程度上是從XML中讀取的。View與事件〔event〕息息相關,兩者之間通過Listener結(jié)合在一起,每一個View都可以注冊一個eventlistener,例如:當View要處理用戶觸碰〔touch〕的事件時,就要向Android框架注冊View.OnClickListener。另外還有Image等同于J2ME的BitMap。中介軟件操作系統(tǒng)與應用程序的溝通橋梁,應用分為兩層:函數(shù)層〔Library〕和虛擬機〔VirtualMachine〕。Bionic是Android改進libc的版本。Android同時包含了Webkit,所謂的Webkit就是AppleSafari瀏覽器背后的引擎。Surfaceflinger是就2D或3D的內(nèi)容顯示到屏幕上。Android使用工具鏈(Toolchain)為Google自制的BionicLibc。Android采用OpenCORE作為根基多媒體框架。OpenCORE可分7大塊:PVPlayer、PVAuthor、Codec、PacketVideoMultimediaFramework(PVMF)、OperatingSystemCompatibilityLibrary(OSCL)、Common、OpenMAX。Android使用skia為核心圖形引擎,搭配OpenGL/ES。skia與LinuxCairo功能相當,但相較于LinuxCairo,skia功能還只是雛形的。2005年Skia公司被Google收購,2007年初,SkiaGL源碼被公開,目前Skia也是GoogleChrome的圖形引擎。Android的多媒體數(shù)據(jù)庫采用SQLite數(shù)據(jù)庫系統(tǒng)。數(shù)據(jù)庫又分為共用數(shù)據(jù)庫及私用數(shù)據(jù)庫。用戶可通過ContentResolver類〔Column〕取得共用數(shù)據(jù)庫。Android的中間層多以Java實現(xiàn),并且采用特殊的Dalvik虛擬機〔DalvikVirtualMachine〕。Dalvik虛擬機是一種“暫存器型態(tài)〞〔RegisterBased〕的Java虛擬機,變量皆存放于暫存器中,虛擬機的指令相對減少。Dalvik虛擬機可以有多個實例〔instance〕,每個Android應用程序都用一個自屬的Dalvik虛擬機來運行,讓系統(tǒng)在運行程序時可到達優(yōu)化。Dalvik虛擬機并非運行Java字節(jié)碼〔Bytecode〕,而是運行一種稱為.dex格式的文件。硬件抽象層Android的HAL〔硬件抽象層〕是能以封閉源碼形式提供硬件驅(qū)動模塊。HAL的目的是為了把Androidframework與Linuxkernel隔開,讓Android不至過度依賴Linuxkernel,以達成kernelindependent的概念,也讓Androidframework的開發(fā)能在不考慮驅(qū)動程序?qū)崿F(xiàn)的前提下進展開展。HALstub是一種代理人〔proxy〕的概念,stub是以*.so檔的形式存在。Stub向HAL“提供〞操作函數(shù)〔operations〕,并由Androidruntime向HAL取得stub的operations,再callback這些操作函數(shù)。HAL里包含了許多的stub〔代理人〕。Runtime只要說明“類型〞,即moduleID,就可以取得操作函數(shù)。編程語言Android是運行于Linuxkernel之上,但并不是GNU/Linux。因為在一般GNU/Linux里支持的功能,Android大都沒有支持,包括Cairo、X11、Alsa、FFmpeg、GTK、Pango及Glibc等都被移除掉了。Android又以bionic取代Glibc、以Skia取代Cairo、再以opencore取代FFmpeg等等。Android為了到達商業(yè)應用,必須移除被GNUGPL授權證所約束的部份,例如Android將驅(qū)動程序移到userspace,使得Linuxdriver與Linuxkernel徹底分開。bionic/libc/kernel/并非標準的kernelheaderfiles。Android的kernelheader是利用工具由Linuxkernelheader所產(chǎn)生的,這樣做是為了保存常數(shù)、數(shù)據(jù)構(gòu)造與宏。目前Android的Linuxkernel控制包括安全〔Security〕,存儲器管理〔MemoryManagement〕,程序管理〔ProcessManagement〕,網(wǎng)絡堆?!睳etworkStack〕,驅(qū)動程序模型〔DriverModel〕等。下載Android源碼之前,先要安裝其構(gòu)建工具Repo來初始化源碼。Repo是Android用來輔助Git工作的一個工具。Android系統(tǒng)的特點與功能Android系統(tǒng)的特點1、開放性。Google與開放手機聯(lián)盟合作開發(fā)了Android,Google通過與運行商、設備制造商、開發(fā)商和其他有關各方面結(jié)成深層次的合作伙伴關系,希望通過建設標準化、開放式的移動軟件平臺,在移動產(chǎn)業(yè)形成一個開放式的生態(tài)系統(tǒng)。2、應用程序無界限。Android上的應用可以通過標準API訪問核心移動設備功能。通過互聯(lián)網(wǎng),應用程序可以聲明它們的功能可以提供應其他應用程序使用。3、應用程序是在平等的條件下創(chuàng)立的。移動設備上的應用程序可以被替換或擴展,即使是撥號程序或主屏幕這樣的核心組件。4、應用程序可以輕松地嵌入網(wǎng)絡。應用程序可以輕松地嵌入HTML、JavaScript和樣式表,還可以通過WebView顯示網(wǎng)絡內(nèi)容。5、應用程序可以并行運行。Android是一種完整的多任務環(huán)境,應用程序可以在其中并行運行。在后臺運行時,應用程序可以生成通知以引起注意。Android系統(tǒng)的功能1、支持虛擬鍵盤。虛擬鍵盤的出現(xiàn)意味著基于Android1.5或以上版本的移動設備可以同時支持物理鍵盤和虛擬鍵盤。2、使用Widget實現(xiàn)桌面的個性化。可以用Widget修飾自己的桌面。大多數(shù)小的web應用都是從網(wǎng)絡上獲得實時數(shù)據(jù)并展示給用戶的。Android預裝了5個桌面Widget,包括數(shù)字時鐘、日歷、音樂播放器、相框和搜索。3、用在線文件夾快速游覽數(shù)據(jù)。類似于OSXLeopard的QuickLook特征,Android的在線文件夾可顯示常見的數(shù)據(jù)條目,比方聯(lián)系人、喜歡的應用、E-mail信息、播放列表、書簽、RSS源等,并不需要運行系統(tǒng)程序處理特定的數(shù)據(jù)條目。4、視頻錄制和分享。Android還有錄制和分享視頻的功能,對回放和MPEG-4、3GP等視頻格式也有了更好的支持??梢酝ㄟ^E-mail、MMS或直接上傳到Y(jié)ouTube等方式來分享視頻。5、圖片上傳。在線分享圖片需要的點擊更少。完成照相后,當瀏覽圖片或選擇Google在線圖片服務Picasa時,只需輕點“分享〞就會擁有1Gb的免費圖片存儲空間。6、更快、更兼容的游覽器。Android的基于Webkit內(nèi)核的游覽器帶來了重要的調(diào)速裝置(SpeedPumb),這得益于新的Wenkit渲染引擎和優(yōu)化的Java腳本編譯器(SquireFish).7、VoiceSearch語音搜索。帶有語音識別技術的Google手機已于2008年11月面世,它支持語音搜索功能。該功能增強了默認的搜索能力,已超過純文本搜索。8、立體聲藍牙和免提。除了增強的免提體驗,Android還支持立體聲藍牙(A2Dphe和AVCRP),并有自動配對功能。9、強大的GPS技術。Android內(nèi)部提供了大量的GPS組件,我們可以很輕松地獲得設備當前的位置等信息,讓導航等功能更加完美。10、Android系統(tǒng)硬件檢測。Android可自動檢測和修復SD卡的文件系統(tǒng),允許第三方應用顯示Android系統(tǒng)的硬件特征。為了讓用戶下載到與自己的設備匹配的應用,我們可以檢測用戶設備的硬件信息,讓滿足應用要求的設備安裝該程序,當更多的Android設備建設在不同的硬件上時,這個功能顯得很實用。Android平臺與iPhone平臺的比照過去智能手機市場的領先者是WindowsMobile/SmartPhone和BlackBerry,同時Symbian和Palm也在其中角逐。但隨著iPhone橫空出世,就以簡單易用,并功能強大,作為了智能手機的代名詞。近來android也以其開源、免費的特質(zhì)強勢來襲,下面就其孰優(yōu)孰劣進展一下比照。開發(fā)平臺的比照對于iPhone平臺的開發(fā),首先要熟悉Apple的MACOS或者是Unix系統(tǒng)的開發(fā)根基,iPhone的開發(fā)工具Xcode并不支持Windows平臺,因此開發(fā)者首先要擁有一臺mac電腦;語言學習方面,熟悉C語言的工程師可以省一點力,因為在Objective-C中,可以直接編寫C程序,唯有用戶接口的局部,一定得仰賴Objective-C。Android采用java開發(fā),因此Android對系統(tǒng)資源的操作程度已接近PC客戶端開發(fā)。程序兼容性問題iPhone獨此一家,因此可以很好控制應用兼容性問題,而Android平臺的手機聯(lián)盟戰(zhàn)略,便有各家廠商的不同規(guī)格型號的機器,因而Google通過手機廠商統(tǒng)一硬件的規(guī)格手段到達兼容性的平衡。不過,也確實有開發(fā)者擔憂Android的開放平臺,未來難保手機廠商不會因為自身的需求而有所調(diào)整,仍可能導致兼容性問題發(fā)生。封閉和開放的審核制度封閉和嚴格的審核一直都是iPhone做為Apple設計理念和保證app質(zhì)量的評審手段之一,在app應用開發(fā)完成,上架AppStore上前,Apple也必須審核軟件的內(nèi)容,以防止包含色情與暴力,或者有Bug的軟件,影響整個市集的質(zhì)量。由于iPhone軟件的銷售與安裝,只能透過AppStore這個唯一的管道,有志進入IPhone市場的開發(fā)者,也不得不買賬。相較于Apple的封閉,Android就顯得開放許多,AndroidMarket則是被動審查機制(只有被足夠多的用戶舉報,Google才會對此進展審核),程序上傳幾個小時后,使用者就可以下載。事實上開發(fā)者不經(jīng)由AndroidMarket,也有其他途徑營銷。如:安卓市場。封閉與開放的作法各有好處,由Apple把關且鎖定銷售管道的作法,對消費者而言,可以確保質(zhì)量;而開發(fā)者也省得比擬各市集之間的優(yōu)劣。而Android的開放作法,則有不設限的好處──開發(fā)者不用擔憂Apple因為自身利益的考慮,而駁回軟件上架的申請。消費者的選擇自由度也高出很多。UI交互上的差異在傳統(tǒng)手機時代,用戶直接用鍵盤、按鍵操作數(shù)據(jù)。iPhone的操作有別于之前傳統(tǒng)手機的體驗,iPhone大觸摸屏概念推出,用戶可以直接對內(nèi)容進展操作排除其他中間設備控制,降低用戶使用門檻,對內(nèi)容操作也有很直接的體驗。Android則保存?zhèn)鹘y(tǒng)手機的一些特征(返回、搜索、home、menu實體按鍵),也同樣有大觸摸屏;兩者之間的硬件差異,因此也決定了交互視覺上本質(zhì)的差異;iPhone遵從Apple精簡設計風格,用隱喻的視覺方式提示用戶進展使用操作,同樣也直觀表達下一步的操作流程。大局部操作直接和內(nèi)容交互完成,用戶體驗統(tǒng)一連貫,典型案例:解鎖。Android有實體按鍵,承載其余過多的根本操作,將用戶停留在最重要的內(nèi)容上,因為有更多硬件操作,也能有更豐富的表現(xiàn),典型案例:軌跡球顏色提醒。缺點:局部操作,屏幕與按鍵之間來回轉(zhuǎn)換。title和導航指引手持移動設備的特性決定屏幕的有限,在應用程序的層級關系中如何指引用戶完成操作,便尤為重要。iPhone:應用程序有信息層級關系,iPhone利用title區(qū)域進展操作指引,title的左邊是返回。讓用戶明確層級之間的關系。Android:頁面的回退依靠實體返回按鍵,因此title區(qū)域不必要操作,在視覺上減小了高度,擴大了內(nèi)容區(qū)域。缺點:沒有一個好的導航指引。Android平臺開發(fā)過程研究Android移動平臺作為21世紀的新秀,受到了越來越多的開發(fā)者的追捧,在這股開發(fā)的浪潮中,逐漸形成了一套具有Android特色的開發(fā)流程。由于Android的優(yōu)越性,其開發(fā)顯得非常的有規(guī)律性可尋。大致的開發(fā)流程如下:1、需求分析。作為一個軟件,它必須有其存在的意義和價值。而這價值和意義就需要靠需求分析來確定。2、功能分析。作為一個手機軟件,它的任務就是給用戶使用的。如何提供最好的用戶體驗就值得每一個程序員深思。這也是衡量一個程序成功與否的關鍵所在。3、界面設計。作為一個手機軟件,它只能在極有限的區(qū)域中顯示自己。如何在有限的空間里面更完美的展現(xiàn)出自己的獨特之處就顯得尤為重要了。4、系統(tǒng)開發(fā)。作為一個軟件的主體局部,系統(tǒng)開發(fā)的好壞直接決定了該系統(tǒng)的性能和壽命。5、測試。在任何一個軟件開發(fā)行業(yè)中,無論是J2EE、J2SE、J2ME等等其他開發(fā)中,測試時必不可少的一環(huán)。在Android開發(fā)中,由于手機的高頻率使用,和硬件系統(tǒng)上的缺乏,使得對軟件的要求更加的嚴格,這就要求在開發(fā)完成后,在對其進展嚴格的測試。而測試又包括了單元測試、系統(tǒng)測試等等方面的測試。6、發(fā)布。在完成了一個系統(tǒng)的開發(fā)后,就要將其發(fā)布,只有經(jīng)過廣闊用戶的考驗,才算是一個合格的產(chǎn)品。在Android平臺中,Google提供了一套完整的發(fā)布機制——Googlemarket。Android開發(fā)環(huán)境的搭建下載需要用到的工具1、下載JAVA的IDE開發(fā)工具–Eclipse到Eclipse官方網(wǎng)站下載EclipseForJavaEE的最新Windows版本下載頁面地址::///downloads/,如圖2.1所示:圖2.1下載Eclipse2、下載Java開發(fā)包—JavaSEDevelopmentKit(JDK)JDK6到Sun官方網(wǎng)站下載JDK6,選擇JDK6Update12下載頁面地址:://java.sun/javase/downloads/index.jsp,如圖2.2所示:圖2.2下載JDK3、下載Android開發(fā)包—AndroidSDK到Google的官方網(wǎng)站下載ForWindows的Android的開發(fā)包下載地址:://dl.google/android/android-sdk_r11-windows下載完需要的工具之后,開場安裝1、安裝Eclipse:下載回來的Eclipse(eclipse-jee-ganymede-SR2-win32.zip)直接解壓即可2、安裝JDK6:運行下載回來的JSK安裝包(jdk-6u25-windows-i586.exe),一路“下一步〞即可3、安裝Android開發(fā)包(SDK):下載回來的SDK包(android-sdk_r11-windows.zip)直接解壓即可讓Eclipse自動安裝Android開發(fā)插件(ADT-plugin)1、啟動安裝完(解壓)后的Eclipse目錄下的Ecplise.exe2、點擊菜單“Help〞->“SoftwareUpdates〞,在翻開的窗口中切換到選項頁“AvailableSoftware〞3、首先點擊選項“Addsite…〞,然后手動輸入以下地址:://dl-ssl.google/android/eclipse/,點擊“OK〞4、剛剛參加的地址,點擊“Install…〞進展ADT(AndroidDevelopmentTools)的安裝工作。5、Eclipse此時會從參加的地址中自動下載跟安裝ADT,稍等一會,安裝完畢后,提示需要重啟Eclipse,點擊“OK〞重啟Eclipse。如圖2.3所示:配置AndroidSDK路徑重啟Eclipse后,點擊菜單“Window〞->“Preference〞,翻開配置窗口,在左邊選中Android,在右邊輸入AndroidSDK的路徑(剛剛步驟下載的AndroidSDK解壓出來的目錄),點擊“OK〞,如圖2.4所示:圖2.3安裝ADT圖2.4配置AndroidSDK路徑創(chuàng)立AVD為使android應用程序可以在模擬器上運行,必須創(chuàng)立AVD。在eclipse中選擇Windows>AndroidSDKandAVDManager,點擊左側(cè)面板的VirtualDevices,再右側(cè)點擊New。填入Name,選擇Target的API,SDCard大小任意〔推薦256M〕,Skin隨便選,Hardware目錄保持默認值。點擊CreateAVD即可完成創(chuàng)立AVD。本系統(tǒng)是在AndroidSDK2.1下完成的。自此Android開發(fā)環(huán)境搭建完成。相關技術理論RSS技術簡介信息傳播工具多種多樣,包括可以免費收聽的無線電播送、公共和有線電視、印刷媒體,甚至包括Internet這樣顛覆性的技術,以及其龐大的Web站點和電子郵件訂閱。雖然選擇很多,但是這些工具都存在一個問題:很難在龐雜的海量數(shù)據(jù)中準確查找到真正感興趣的信息和價值。幸運的是,RSS可以幫助我們解決這個問題。RSS是“ReallySimpleSyndication〞的縮寫。RSS是一種內(nèi)容發(fā)布者用來發(fā)布信息的XML數(shù)據(jù)格式,這些信息經(jīng)過了分類并適合人機閱讀。RSS提要通常使用諸如新聞閱讀器這種人類可讀的友好格式進展處理并顯示給用戶,本教程中構(gòu)建的應用程序就是這樣一種新聞閱讀器。RSS提要同樣可以供計算機使用,從而生成后續(xù)的、聚合的信息源。舉例來說,定期檢索并提供應旅行社本地預訂系統(tǒng)的租賃列表就是一個機器使用RSS提要的例子。在討論新聞內(nèi)容時經(jīng)常會提到RSS,然而,除新聞以外,這種格式可用于組織和發(fā)布其他很多類型的信息。例如,很多Web站點都發(fā)布可用的pod-cast的RSS提要,從而發(fā)布音頻和視頻內(nèi)容。Handango是一個流行的移動軟件和內(nèi)容的在線商店,它根據(jù)移動平臺分類,提供新的流行軟件標題的提要。例如,提供針對Windows?Mobile、Blackberry、Palm和其他平臺的提要。用不了多久,很可能就會提供針對Android應用程序的提要了!RSS的格式是XML數(shù)據(jù),這表示數(shù)據(jù)本身就包含描述性元素,也就是說它是自包含的。隨著行業(yè)的逐步標準化,XML構(gòu)造在過去幾年也經(jīng)歷了一些變化。最新的版本也是應用最廣的版本是2.0。RSS2.0是一種相對簡單的XML構(gòu)造,很容易由計算機程序解析。RSS是站點用來和其他站點之間共享內(nèi)容的一種簡易方式〔也叫聚合內(nèi)容〕,通常被用于新聞和其他按順序排列的網(wǎng)站,例如Blog。一段工程的介紹可能包含新聞的全部介紹,Blogpost等等。或者僅僅是額外的內(nèi)容或者簡短的介紹。這些工程的鏈接通常都能鏈接到全部的內(nèi)容。網(wǎng)絡用戶可以在客戶端借助于支持RSS的新聞聚合工具軟件〔例如NewzCrawler、FeedDemon〕,在不翻開網(wǎng)站內(nèi)容頁面的情況下閱讀支持RSS輸出的網(wǎng)站內(nèi)容。網(wǎng)站提供RSS輸出,有利于讓用戶發(fā)現(xiàn)網(wǎng)站內(nèi)容的更新。RSS的優(yōu)點。如果沒有RSS,用戶就不得不每日都來您的網(wǎng)站檢查新的內(nèi)容。對許多用戶來說這樣太費時了。通過RSSfeed〔RSS通常被稱為Newsfeed或RSSfeed〕,用戶們可以使用RSS聚合器來更快地檢查您的網(wǎng)站更新〔RSS聚合器是用來聚集并分類RSSfeed的網(wǎng)站或軟件〕。由于RSS數(shù)據(jù)很小巧并可快速加載,它可輕易地被類似移動或PDA的服務使用。擁有相似內(nèi)容的網(wǎng)站環(huán)〔Web-rings〕可以輕易地在它們的網(wǎng)站共享內(nèi)容,使這些網(wǎng)站更出色更有價值。Pull解析算法研究構(gòu)建RSS閱讀器應用程序的核心操作就是獲取并處理XML數(shù)據(jù)。當前GoogleAndroid處理讀取XML數(shù)據(jù)有三種主流方式:DOM解析、Pull解析、SAX解析。下面來對這三種解析方法來進展比擬:DOM解析XML文件時,會將XML文件的所有內(nèi)容讀取到內(nèi)存中,然后允許您使用DOMAPI遍歷XML樹、檢索所需的數(shù)據(jù)。使用DOM操作XML的代碼看起來比擬直觀,并且,在某些方面比基于SAX的實現(xiàn)更加簡單。但是,因為DOM需要將XML文件的所有內(nèi)容讀取到內(nèi)存中,所以內(nèi)存的消耗比擬大,特別是對于運行Android的移動設備來說,因為設備的資源比擬珍貴,所以建議還是采用SAX或者PULL來解析XML文件,當然,如果XML文件的內(nèi)容比擬小的時候采用DOM是可行的。SAX是一個解析速度快并且占用內(nèi)存少的xml解析器,非常適合用于Android等移動設備。SAX解析XML文件采用的是事件驅(qū)動,也就是說,它并不需要解析完整個文檔,在按內(nèi)容順序解析文檔的過程中,SAX會判斷當前讀到的字符是否合法XML語法中的某局部,如果符合就會觸發(fā)事件。所謂事件,其實就是一些回調(diào)〔callback〕方法,這些方法(事件)定義在ContentHandler接口。如果在一個XML文檔中我們只需要前面一局部數(shù)據(jù),假設使用SAX方式或DOM方式會對整個文檔進展解析,盡管XML文檔中后面的大局部數(shù)據(jù)我們其實都不需要解析,因此這樣實際上就浪費了處理資源。因此使用PULL方式比擬適宜。Pull解析器和SAX解析器雖有區(qū)別但也有相似性。他們的區(qū)別為:SAX解析器的工作方式是自動將事件推入注冊的事件處理器進展處理,因此你不能控制事件的處理主動完畢;而Pull解析器的工作方式為允許你的應用程序代碼主動從解析器中獲取事件,正因為是主動獲取事件,因此可以在滿足了需要的條件后不再獲取事件,完畢解析。這是他們主要的區(qū)別。而他們的相似性在運行方式上,Pull解析器也提供了類似SAX的事件,開場文檔START_DOCUMENT和完畢文檔END_DOCUMENT,開場元素START_TAG和完畢元素END_TAG,遇到元素內(nèi)容TEXT等,但需要調(diào)用next()方法提取它們〔主動提取事件〕。Android系統(tǒng)中和Pull方式相關的包為org.xmlpull.v1,在這個包中提供了Pull解析器的工廠類XmlPullParserFactory和Pull解析器XmlPullParser,XmlPullParserFactory實例調(diào)用newPullParser方法創(chuàng)立XmlPullParser解析器實例,接著XmlPullParser實例就可以調(diào)用getEventType()和next()等方法依次主動提取事件,并根據(jù)提取的事件類型進展相應的邏輯處理。另外Pull方式比擬簡單,而且可以根據(jù)判斷停頓解析〔DOM和SAX都需要對文件的文章解析中途不能停頓〕。綜合考慮,本系統(tǒng)的實現(xiàn)用到的是Pull解析算法來解析數(shù)據(jù)源。Android平臺下RSS閱讀器的詳細分析設計與實現(xiàn)問題的提出需求分析1、系統(tǒng)開發(fā)背景。在信息高速開展的今天,人們對信息非常的重視,希望能夠隨時隨地的獲取即時更新的信息。而新聞閱讀器剛好可以滿足人們的要求。在傳統(tǒng)的平臺例如IPhone,有許多類似的程序,都受到了用戶的好歡送。通過武漢某公司在Googleandroidmarket上面的程序的調(diào)查,發(fā)現(xiàn)關于信息方面的程序普遍受到廣闊用戶的歡送。因此本系統(tǒng)將能滿足人們對信息的需求。2、系統(tǒng)功能的描述1)頻道的切換:用戶能按照自己的需求來切換自己所需要的頻道。2)新聞的閱讀:當用戶翻開一個新聞的時候,用戶能準確無誤并且方便的讀取到新聞的內(nèi)容。3)新聞的收藏:當用戶覺得某一個新聞有趣的時候,用戶能將其添加到自己所喜歡的新聞列表中。4)新聞的更新:當RSS更新以后,程序能做相應的更新,能與網(wǎng)絡上的內(nèi)容保持一致性。做到即時更新。系統(tǒng)功能構(gòu)造根據(jù)系統(tǒng)需求描敘和系統(tǒng)數(shù)據(jù)流圖,得出系統(tǒng)功能構(gòu)造如圖4.1所示:RSS閱讀器新聞頻道顯示與切換新聞的顯示新聞的收藏與刪除圖4.1系統(tǒng)功能構(gòu)造圖解決方案為了解決上一節(jié)所提出的需求分析,我們提出下面的解決方案,它遵循了android平臺開發(fā)的規(guī)律,具體流程如圖4.2所示:數(shù)據(jù)源的選取數(shù)據(jù)源的選取數(shù)據(jù)的解析系統(tǒng)的布局設計系統(tǒng)穩(wěn)定性的設計與檢測開場完畢圖4.2系統(tǒng)解決方案流程圖在開發(fā)前期,筆者先找到了適合作為新聞源的RSS源的數(shù)據(jù)源,并找到最優(yōu)的解析算法——Pull。在數(shù)據(jù)準備完成后,筆者為基于Googleandroid移動平臺的新聞閱讀器的界面做了詳細的規(guī)劃。在完成這些以后,筆者對系統(tǒng)的穩(wěn)定性進展了相關的調(diào)研,然后做出了相應的假設,并進展驗證,最后通過驗證的結(jié)果來對系統(tǒng)的穩(wěn)定性做了相應的檢測和操作。主要功能詳細設計與實現(xiàn)RSS數(shù)據(jù)源的選取基于Android平臺的RSS閱讀器作為一款新聞閱讀器,對RSS源的要求及其苛刻:(1)RSS源必須是穩(wěn)定的,除非出現(xiàn)特殊情況,否則不會出現(xiàn)無法讀取的情況。(2)RSS源的更新頻率必須盡量的高,能做到將第一手的新聞資料上傳更新,使得用戶能最早的獲得相關新聞資料。(3)RSS源的訪問速度。由于基于GoogleAndroid平臺的新聞閱讀器的使用對象是手機,而手機則是通過GPS、WIFI等其他的無線網(wǎng)絡訪問RSS源,所以對RSS源的訪問速度有較高的要求。(4)RSS源的格式。由于讀取RSS源的內(nèi)容是通過解析相應的XML文件而獲得的,所以基于GoogleAndroid平臺的新聞閱讀器對RSS源的格式有非常高的要求,既當RSS源的格式一旦固定,無論是將來的更新或者是添加等其他操作的時候RSS源的格式必須保持一定。基于以上幾點,加上本人的個人喜好,并經(jīng)過測試,本系統(tǒng)選擇了新浪RSS源。RSS源的解析構(gòu)建RSS閱讀器應用程序的核心操作是獲取并處理XML數(shù)據(jù)。當前GoogleAndroid處理讀取XML數(shù)據(jù)有三種主流方式:DOM解析、Pull解析、SAX解析。下面來對這三種解析方法來進展比擬:DOM解析XML文件時,會將XML文件的所有內(nèi)容讀取到內(nèi)存中,然后允許您使用DOMAPI遍歷XML樹、檢索所需的數(shù)據(jù)。使用DOM操作XML的代碼看起來比擬直觀,并且,在某些方面比基于SAX的實現(xiàn)更加簡單。但是,因為DOM需要將XML文件的所有內(nèi)容讀取到內(nèi)存中,所以內(nèi)存的消耗比擬大,特別對于運行Android的移動設備來說,因為設備的資源比擬珍貴,所以建議還是采用SAX或者PULL來解析XML文件,當然,如果XML文件的內(nèi)容比擬小的時候采用DOM是可行的。SAX是一個解析速度快并且占用內(nèi)存少的xml解析器,非常適合用于Android等移動設備。SAX解析XML文件采用的是事件驅(qū)動,也就是說,它并不需要解析完整個文檔,在按內(nèi)容順序解析文檔的過程中,SAX會判斷當前讀到的字符是否合法XML語法中的某局部,如果符合就會觸發(fā)事件。所謂事件,其實就是一些回調(diào)〔callback〕方法,這些方法(事件)定義在ContentHandler接口。如果在一個XML文檔中我們只需要前面一局部數(shù)據(jù),假設使用SAX方式或DOM方式會對整個文檔進展解析,盡管XML文檔中后面的大局部數(shù)據(jù)我們其實都不需要解析,因此這樣實際上就浪費了處理資源。使用PULL方式正適宜。Pull解析器和SAX解析器雖有區(qū)別但也有相似性。他們的區(qū)別為:SAX解析器的工作方式是自動將事件推入注冊的事件處理器進展處理,因此你不能控制事件的處理主動完畢;而Pull解析器的工作方式為允許你的應用程序代碼主動從解析器中獲取事件,正因為是主動獲取事件,因此可以在滿足了需要的條件后不再獲取事件,完畢解析。這是他們主要的區(qū)別。而他們的相似性在運行方式上,Pull解析器也提供了類似SAX的事件,開場文檔START_DOCUMENT和完畢文檔END_DOCUMENT,開場元素START_TAG和完畢元素END_TAG,遇到元素內(nèi)容TEXT等,但需要調(diào)用next()方法提取它們〔主動提取事件〕。Android系統(tǒng)中和Pull方式相關的包為org.xmlpull.v1,在這個包中提供了Pull解析器的工廠類XmlPullParserFactory和Pull解析器XmlPullParser,XmlPullParserFactory實例調(diào)用newPullParser方法創(chuàng)立XmlPullParser解析器實例,接著XmlPullParser實例就可以調(diào)用getEventType()和next()等方法依次主動提取事件,并根據(jù)提取的事件類型進展相應的邏輯處理。//創(chuàng)立XmlPullParser,有兩種方式//方式一:使用工廠類XmlPullParserFactoryXmlPullParserFactorypullFactory=XmlPullParserFactory.newInstance();XmlPullParserxmlPullParser=pullFactory.newPullParser();//方式二:使用Android提供的實用工具類android.util.XmlXmlPullParserxmlPullParser=Xml.newPullParser();XmlPullParser.setInput(InputStreaminputStream,StringinputEncoding)解析對應的輸入文件XmlPullParser.getEventType()得到元素PULL方式比擬簡單,而且可以根據(jù)判斷停頓解析〔DOM和SAX都需要對文件的文章解析中途不能停頓〕。因此在本RSS閱讀器系統(tǒng)中,RSS數(shù)據(jù)源的解析用到的是方式一使用工廠類XmlPullParserFactory來創(chuàng)立XmlPullParser。系統(tǒng)界面的設計在講述系統(tǒng)界面的設計之前,我們先來介紹一下Android中的四大組件。對于一個Android應用程序來說,是由四種構(gòu)造塊組織而成的,這四種構(gòu)造塊如下ActivityIntentReceiverServiceContentProvider但是,并不是每一個Android應用程序都需要這四種構(gòu)造塊,這不是必須的,某些時候,我們只需要這四種中的幾種組合成我們的應用。Activity:Activity是Android構(gòu)造塊中最根本的一種,在應用中,一個activity通常就是一個單獨的屏幕。每一個activity都被實現(xiàn)為一個獨立的類,并且繼承于Activity這個基類。這個activity類將會顯示由幾個Views控件組成的用戶接口,并對事件做出響應。大部份的應用都會包含多個的屏幕。例如,一個短消息應用程序?qū)幸粋€屏幕用于顯示聯(lián)系人列表,第二個屏幕用于寫短消息,同時還會有用于瀏覽舊短消息及進展系統(tǒng)設置的屏幕。每一個這樣的屏幕,就是一個activity。從一個屏幕導航到另一個屏幕是很簡單的。在一些應用中,一個屏幕甚至會返回值給前一個屏幕。當一個新的屏幕翻開后,前一個屏幕將會暫停,并保存在歷史堆棧中。用戶可以返回到歷史堆棧中的前一個屏幕。當屏幕不再使用時,還可以從歷史堆棧中刪除。默認情況下,Android將會保存從主屏幕到每一個應用的運行屏幕。Android使用了Intent這個特殊類,實現(xiàn)在屏幕與屏幕之間移動。Intent類用于描述一個應用將會做什么事。在Intent的描述構(gòu)造中,有兩個最重要的局部:動作和動作對應的數(shù)據(jù)。典型的動作類型有:MAIN〔activity的門戶〕、VIEW、PICK、EDIT等。而動作對應的數(shù)據(jù)則以URI的形式進展表示。例如:要查看一個人的聯(lián)系方式,你需要創(chuàng)立一個動作類型為VIEW的intent,以及一個表示這個人的URI。與之有關系的一個類叫IntentFilter。相對于intent是一個有效的做某事的請求,一個intentfilter則用于描述一個activity〔或者IntentReceiver〕能夠操作哪些intent。一個activity如果要顯示一個人的聯(lián)系方式時,需要聲明一個IntentFilter,這個IntentFilter要知道怎么去處理VIEW動作和表示一個人的URI。IntentFilter需要在AndroidManifest.xml中定義。通過解析各種intent,從一個屏幕導航到另一個屏幕是很簡單的。當向前導航時,activity將會調(diào)用startActivity(IntentmyIntent)方法。然后,系統(tǒng)會在所有安裝的應用程序中定義的IntentFilter中查找,找到最匹配myIntent的Intent對應的activity。新的activity接收到myIntent的通知后,開場運行。當startActivity方法被調(diào)用將觸發(fā)解析myIntent的動作,這個機制提供了兩個關鍵好處:A、Activities能夠重復利用從其它組件中以Intent的形式產(chǎn)生的一個請求;B、Activities可以在任何時候被一個具有一樣IntentFilter的新的Activity取代Intentreceiver:當你希望你的應用能夠?qū)σ粋€外部的事件〔如當呼入時,或者數(shù)據(jù)網(wǎng)絡可用時,或者到了晚上時〕做出響應,你可以使用一個IntentReceiver。雖然IntentReceiver在感興趣的事件發(fā)生時,會使用NotificationManager通知用戶,但它并不能生成一個UI。IntentReceiver在AndroidManifest.xml中注冊,但也可以在代碼中使用Context.registerReceiver()進展注冊。當一個intentreceiver被觸發(fā)時,你的應用不必對請求調(diào)用intentreceiver,系統(tǒng)會在需要的時候啟動你的應用。各種應用還可以通過使用Context.broadcastIntent()將它們自己的intentreceiver播送給其它應用程序。Service:一個Service是一段長生命周期的,沒有用戶界面的程序。比擬好的一個例子就是一個正在從播放列表中播放歌曲的媒體播放器。在一個媒體播放器的應用中,應該會有多個activity,讓使用者可以選擇歌曲并播放歌曲。然而,音樂重放這個功能并沒有對應的activity,因為使用者當然會認為在導航到其它屏幕時音樂應該還在播放的。在這個例子中,媒體播放器這個activity會使用Context.startService()來啟動一個service,從而可以在后臺保持音樂的播放。同時,系統(tǒng)也將保持這個service一直執(zhí)行,直到這個service運行完畢。另外,我們還可以通過使用Context.bindService()方法,連接到一個service上〔如果這個service還沒有運行將啟動它〕。當連接到一個service之后,我們還可以service提供的接口與它進展通訊。拿媒體播放器這個例子來說,我們還可以進展暫停、重播等操作。ContentProvider:應用程序能夠?qū)⑺鼈兊臄?shù)據(jù)保存到文件中、SQL數(shù)據(jù)庫中,甚至是任何有效的設備中。當你想將你的應用數(shù)據(jù)與其它的應用共享時,ContentProvider將會很有用。一個ContentProvider類實現(xiàn)了一組標準的方法,從而能夠讓其它的應用保存或讀取此ContentProvider處理的各種數(shù)據(jù)類型。下面開場講述本RSS閱讀器主界面的設計。先看看整個系統(tǒng)的架構(gòu)流程圖如圖4.3所示:MainActivityMainActivityNewsView主菜單界面新聞大類新聞小類新聞內(nèi)容頁面顯示新聞標題圖4.3RSS閱讀器系統(tǒng)架構(gòu)流程圖MainActivity是程序的主體局部,整個程序的執(zhí)行從這里開場,在MainActivity里調(diào)用NewsCategory.java中的方法,進入NewsView,在NewsView中展示主菜單的布局,包括主界面和新聞大類,新聞小類的顯示可以通過新聞大類的頻道切換來完成,新聞大類和新聞小類是分別是在GetNewsMenu.java和GetNewsTitle.java中用pull解析法獲取RSS數(shù)據(jù)源,點擊新聞標題以后可以進入新聞頁面閱讀新聞內(nèi)容。由于RSS源是從新浪網(wǎng)獲取,而且為了迎合不同人群的不同喜好的新聞類型,所以主界面可以多設計幾個新聞類別選擇的菜單,本系統(tǒng)仿照新浪首頁的菜單顯示方式,主界面如圖4.4所示:圖4.4RSS閱讀器主界面1點擊向左或者向右可以獲得更多的新聞類別,如圖4.5和圖4.6所示:圖4.5RSS閱讀器主界面2圖4.6RSS閱讀器主界面3其中“新聞中心〞包含了所有類別,而且在進入該RSS閱讀器的時候,光標會默認的停在“新聞中心〞上,每個頻道下面都有對應的新聞小類,新聞小類下面才是一條條新聞的標題。現(xiàn)在先介紹頻道之間的切換,上圖中的向左向右鍵便是用來實現(xiàn)頻道切換功能的,下面是實現(xiàn)頻道切換的關鍵代碼:publicvoidonClick(Viewv){switch(v.getId()){caseR.id.main_backward_imageView:mViewFlipper.showPrevious();break;caseR.id.main_next_imageView:mViewFlipper.showNext();break;default:break; }if(v.getId()>=R.id.tv01&&v.getId()<=R.id.tv15){ Log.d(this.toString(),"onClick"); TextViewtv=(TextView)findViewById(v.getId());list=map.get(tv.getText().toString().replaceAll("\n","").replaceAll("",""));if(list!=null){mListView.setAdapter(newDemoListAdapter(this,list)); }else{ Log.e(LOG,"List<NewsCategory>isnull"); } } }上述代碼中的switch語句便是用來實現(xiàn)頻道切換的,其中上一頁的ID是R.id.main_backward_imageView,當程序執(zhí)行到這個case的時候,便調(diào)用showPrevious〔〕方法來顯示前一頁的主菜單內(nèi)容,圖4.4的前一頁是圖4.6;同樣的,下一頁的ID是R.id.main_next_imageView,當程序執(zhí)行到這個case的時候,便調(diào)用showNext〔〕方法來顯示后一頁的內(nèi)容,圖4.4的后一頁是圖4.5。其實包括以上15個新聞類別在內(nèi),每個選項都對應了一個屬于自己的ID,即“新聞中心〞、“體育頻道〞、……、“視頻頻道〞的ID分別是R.id.tv01……R.id.tv15,在主程序中使用ID來進展調(diào)用,所有這些ID對應的選項都包含在main.xml中。上述代碼中的if語句實現(xiàn)了當點擊所有這些新聞頻道圖標時程序應該調(diào)用的方法。新聞閱讀界面設計在新聞顯示界面我們采用GoogleAndroid比擬流行的WebView來進展顯示,下面以“體育頻道〞為例,效果如圖4.7所示:圖4.7點擊“體育頻道〞以后的界面顯示實現(xiàn)這個界面的關鍵代碼包含在GetNewsMenu.java里,通過pull解析方法使用工廠類XmlPullParserFactory創(chuàng)立XmlPullParser來解析從新浪網(wǎng)RSS源里讀取的xml數(shù)據(jù),關鍵代碼如下:publicclassGetNewsMenu{publicstaticMap<String,List<NewsCategory>>PullParseXML()throwsException{List<NewsCategory>listNews=null; NewsCategorynewsCategory=null; StringmapKey=null; XmlPullParserFactorypullParserFactory=XmlPullParserFactory.newInstance(); XmlPullParserxmlPullParser=pullParserFactory.newPullParser(); Log.e("PullParseXML","getXML"); xmlPullParser.setInput(GetNewsMenu.class.getClassLoader().getResourceAsStream("sina_news.xml"),"UTF-8");Log.e("PullParseXML","PullParseXMLstart");inteventType=xmlPullParser.getEventType();while(eventType!=XmlPullParser.END_DOCUMENT){ StringnodeName=xmlPullParser.getName();switch(eventType){caseXmlPullParser.START_DOCUMENT:break;caseXmlPullParser.START_TAG:if("item".equals(nodeName)){ newsCategory=newNewsCategory(); }if("title".equals(nodeName)&&newsCategory!=null){ newsCategory.setTitle(xmlPullParser.nextText()); }if("link".equals(nodeName)&&newsCategory!=null){ newsCategory.setLink(xmlPullParser.nextText()); }break;caseXmlPullParser.END_TAG:if("item".equals(nodeName)){ listNewsTitle.add(newsCategory); }break;default:break; } eventType=xmlPullParser.next(); }returnlistNewsTitle; }}}下面來談談解析過程,這段代碼首先使用工廠類XmlPullParserFactory創(chuàng)立XmlPullParser,然后通過調(diào)用XmlPullParserFactory.newInstance()方法來獲取XmlPullParser的實例,設置好輸入流XML文件裝載器后開場while循環(huán),pull解析器讀到的XML返回的數(shù)字如下所示:讀取到xml的聲明返回數(shù)字0START_DOCUMENT;讀取到xml的完畢返回數(shù)字1END_DOCUMENT;讀取到xml的開場標簽返回數(shù)字2START_TAG;讀取到xml的完畢標簽返回數(shù)字3END_TAG;讀取到xml的文本返回數(shù)字4TEXT通過while循環(huán)中的switch語句中的不同case來判斷元素是否是START_DOCUMENT、END_DOCUMENT、START_TAG、END_TAG、TEXT中的一種,再進展相應解析,只要這個事件返回的不是1我們就一直讀取xml文件。每一個case在break以后,都會調(diào)用xmlPullParser.next()方法,依次主動提取事件,并根據(jù)提取的事件類型進展相應的邏輯處理?,F(xiàn)在我們在新聞menu菜單里可以選擇自己感興趣的體育新聞,例如點擊“英超〞以后,界面效果如圖4.8所示。這個界面顯示的都是新聞標題,同樣是通過pull解析方法使用工廠類XmlPullParserFactory創(chuàng)立XmlPullParser來解析從新浪網(wǎng)RSS源里讀取的xml數(shù)據(jù),方法和技術與前面介紹的根本一致,這里就不再贅述。圖4.8點擊“英超〞以后的界面顯示此時便可以根據(jù)自己的喜好來看標題選擇自己感興趣的新聞了,至于新聞條目的上下拉動可以通過鼠標滾輪來實現(xiàn),比方,我們想知道“曼聯(lián)垂涎天王揚言不購強援就離隊清洗7人可獲4400萬〞這個新聞標題中來自英格蘭足球超級聯(lián)賽的曼聯(lián)隊所“垂涎〞的“天王〞到底是誰,可以點擊此新聞標題來閱讀新聞內(nèi)容,如圖4.9所示。圖4.9RSS閱讀器中新聞內(nèi)容網(wǎng)頁顯示這些新聞都是從新浪RSS源讀取的,局部源的網(wǎng)址如下所示〔這里只包括了“體育頻道〞中從“體育要聞匯總〞到“籃球新聞〞的所有新聞類別的RSS源鏈接〕:……<newstitle="體育頻道"><outlinetitle="體育要聞匯總"xmlUrl="://rss.sina.cn/roll
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 現(xiàn)代辦公模式下的軟件盜版防范策略研究
- 國慶節(jié)活動團購活動方案
- 生態(tài)旅游規(guī)劃的核心策略案例研究報告
- Unit 2 My family(Period 4)(說課稿)-2024-2025學年人教大同版(2024)英語三年級上冊
- 12 盤古開天地 (說課稿)-2024-2025學年統(tǒng)編版語文四年級上冊
- 21三黑和土地 (說課稿)-2024-2025學年六年級上冊語文統(tǒng)編版
- 14文言文二則《兩小兒辯日》(說課稿)-2023-2024學年統(tǒng)編版語文六年級下冊
- 2024年五年級數(shù)學上冊 5 簡易方程第16課時 實際問題與方程(5)配套說課稿 新人教版
- 2024-2025學年高中物理 第10章 熱力學定律 4 熱力學第二定律說課稿1 新人教版選修3-3
- 2025道路綠化養(yǎng)護委托合同
- 餐飲行業(yè)品牌介紹商務宣傳PPT模板
- 關于中小企業(yè)人才流失的調(diào)查分析報告畢業(yè)論文
- 東南大學宣講介紹
- 2023年菏澤醫(yī)學??茖W校單招綜合素質(zhì)題庫及答案解析
- 九年級下冊-2023年中考歷史總復習知識點速查速記(部編版)
- GB/T 18103-2022實木復合地板
- 釀酒工藝教案
- 地形圖的識別及應用涉密地圖的保密管理課件
- 小學四年級語文閱讀理解專項訓練
- 輔導班合伙人合同范本(2篇)
- 2021年嘉興市法院書記員招聘考試試題及答案解析
評論
0/150
提交評論