基于A(yíng)ndroid系統(tǒng)的電子書(shū)閱讀器的設(shè)計(jì)與實(shí)現(xiàn)(完整資料)_第1頁(yè)
基于A(yíng)ndroid系統(tǒng)的電子書(shū)閱讀器的設(shè)計(jì)與實(shí)現(xiàn)(完整資料)_第2頁(yè)
基于A(yíng)ndroid系統(tǒng)的電子書(shū)閱讀器的設(shè)計(jì)與實(shí)現(xiàn)(完整資料)_第3頁(yè)
基于A(yíng)ndroid系統(tǒng)的電子書(shū)閱讀器的設(shè)計(jì)與實(shí)現(xiàn)(完整資料)_第4頁(yè)
基于A(yíng)ndroid系統(tǒng)的電子書(shū)閱讀器的設(shè)計(jì)與實(shí)現(xiàn)(完整資料)_第5頁(yè)
已閱讀5頁(yè),還剩151頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

基于A(yíng)ndroid系統(tǒng)的電子書(shū)閱讀器的設(shè)計(jì)與實(shí)現(xiàn)(完整資料)(可以直接使用,可編輯優(yōu)秀版資料,歡迎下載)

4.3。2建表語(yǔ)句基于A(yíng)ndroid系統(tǒng)的電子書(shū)閱讀器的設(shè)計(jì)與實(shí)現(xiàn)(完整資料)(可以直接使用,可編輯優(yōu)秀版資料,歡迎下載)1)創(chuàng)建:1、創(chuàng)建書(shū)的表:createtableIFNOTEXISTSbook(bidintegerprimarykeyautoincrement,bpathvarchar(255)notnull);2、創(chuàng)建書(shū)簽的表:creat(yī)etableIFNOTEXISTSbookmark(bmidintegerprimarykeyautoincrement,bpathvarchar(50)notnull,bmnamevarchar(50)notnull,bmoffsetintegernotnull,bmsavetimevarchar(20)notnull);3、創(chuàng)建用戶(hù)管理的表:createtableIFNOTEXISTSuser(useridintegerprimarykeyautoincrement,usernamevarchar(20)notnull,passwordvarchar(20)notnull,telephonevarchar(20)notnull);4、創(chuàng)建最近閱讀的表createtableIFNOTEXISTSnearlyread(bookidintegerprimarykeyautoincrement,booknamevarchar(50)notnull,bookreadtimevarchar(20)notnull);5、創(chuàng)建下載管理的表createtableIFNOTEXISTSdown(downidintegerprimarykeyautoincrement,downuservarchar(20)notnull,downbookvarchar(20)notnull,downtimevarchar(20)notnull);2)SQlite3數(shù)據(jù)庫(kù)使用方法:選擇:selectfrombookmarkwherebmid=1;插入:insert(bookmark,null,values);刪除:deletefrombookmarkwherebmid=3;查找:query(table,columns,selection,selectionArgs,groupBy,having,orderBy)數(shù)據(jù)表分析本數(shù)據(jù)庫(kù)用的是一個(gè)輕量級(jí)嵌入型數(shù)據(jù)庫(kù)sqlite3,即創(chuàng)建了一個(gè)數(shù)據(jù)庫(kù)reader.db,在數(shù)據(jù)庫(kù)中創(chuàng)建了幾張數(shù)據(jù)表.在建設(shè)網(wǎng)站系統(tǒng)或者軟件之前,我們必須對(duì)系統(tǒng)所用到的數(shù)據(jù)進(jìn)行大致的分類(lèi)和具體的結(jié)構(gòu)設(shè)計(jì),既要做到清晰明了,又要能適應(yīng)系統(tǒng)各項(xiàng)功能的調(diào)用,而不至于產(chǎn)生結(jié)構(gòu)上的邏輯混亂,保證關(guān)鍵數(shù)據(jù)在意外情況下不會(huì)被破壞,可以說(shuō)數(shù)Book表(用來(lái)存放書(shū)籍,如表4-1):字段名稱(chēng)數(shù)據(jù)類(lèi)型條件約束bidintegerprimarykeybpat(yī)hvarchar(255)notnull表4-1書(shū)籍?dāng)?shù)據(jù)表Bookmark表(管理書(shū)簽,如表4—2):字段名稱(chēng)數(shù)據(jù)類(lèi)型條件約束B(niǎo)midIntegerprimarykeyBpathvarchar(50)notnullBmnamevarchar(50)notnullbmoffsetIntegernotnullmsavetimevarchar(20)notnull表4—2書(shū)簽數(shù)據(jù)表User表(用戶(hù)數(shù)據(jù),如表4—3):字段名稱(chēng)數(shù)據(jù)類(lèi)型條件約束UseridIntegerprimarykeyusernamevarchar(50)notnullpasswordvarchar(50)notnulltelephonevarchar(20)notnull表4—3用戶(hù)數(shù)據(jù)表Nearlyread表(最近閱讀,如表4—4):字段名稱(chēng)數(shù)據(jù)類(lèi)型條件約束B(niǎo)ookidIntegerprimarykeybooknamevarchar(50)notnullbookreadtimevarchar(20)notnull表4-4最近閱讀數(shù)據(jù)表Down表(下載,如表4-5)::字段名稱(chēng)數(shù)據(jù)類(lèi)型條件約束DownidIntegerprimarykeyDownuservarchar(50)notnulldowntimevarchar(20)notnull表4-5?下載數(shù)據(jù)表5.4.1獲取sd卡上的txt文本由于一個(gè)Android模擬器或者是一個(gè)手機(jī)客戶(hù)終端上只會(huì)配置一個(gè)sdcard,所以一步移動(dòng)設(shè)備上有各種各樣的應(yīng)用App,而且各種App都可能會(huì)由數(shù)據(jù)或者文件存儲(chǔ)到移動(dòng)設(shè)備的sdcard上,故而有各式各樣的文件類(lèi)型是該款軟件不需要的。也是用戶(hù)選擇本款軟件時(shí)所不需要的信息文件,于是通過(guò)構(gòu)造一個(gè)過(guò)濾式的方法讓軟件只接受來(lái)自sdcard上的TXT格式的文本文件。該方法是先通過(guò)判斷是否存儲(chǔ)路徑是sdcard,通過(guò)getRecordFiles()方法過(guò)濾掉其他無(wú)用文件,將剩余的TXT文件放置集合AirrayList中,然后通過(guò)Android的空間Listview將其目錄結(jié)構(gòu)文件給顯示出來(lái)。代碼如下:privatevoidgetRecordFiles(){recordFiles=newArrayList<String>();if(isSdcard){??Filefiles[]=txtDir。listFiles();if(files!=null){for(inti=0;i<files。length;i++){if(files[i].getName().indexOf(”.")>=0){/*只?。畉xt文件*/?? ?Stringfile=files[i].getName()。substring(files[i].getName().indexOf(”.”));if(file。toLowerCase().equals(".txt"))recordFiles.add(files[i].getName());? ??}? } ?} }}獲取文件名獲取文件名開(kāi)始開(kāi)始獲取文件TXT文件?過(guò)濾存放至集合結(jié)束是否 ???圖5—1文件過(guò)濾流程圖5。4。2長(zhǎng)按選項(xiàng)刪除?可能在漫長(zhǎng)的使用軟件生活中,用戶(hù)會(huì)在sdcard里面積累十分多的TXT文件數(shù)量,所以這里提供一個(gè)刪除功能供用戶(hù)刪除一些很久不用的文件。該功能通過(guò)獲取到Android控件ListView上每一條Item的長(zhǎng)按事件進(jìn)行綁定事件監(jiān)聽(tīng),通過(guò)該行為進(jìn)行功能描述,通過(guò)獲取系統(tǒng)對(duì)于sdcard里面文件的操作權(quán)限來(lái)對(duì)于sdcard里面的TXT文件進(jìn)行刪除。下面是刪除的方法delFile()的部分代碼實(shí)現(xiàn):publicvoiddelFile(StringfilePathAndName){try{?StringfilePat(yī)h=”/sdcard/"+filePat(yī)hAndName; filePath=filePath。toString();?java。io.FilemyDelFile=newjava。io.File(filePath);?myDelFile。delete();?}cat(yī)ch(Exceptione){?Toast。makeText(this,"刪除文件操作出錯(cuò)",1000)。show();?e.printStackTrace();?} }5.4.3閱讀文本界面的實(shí)現(xiàn) 這是該款軟件最基本也是最重要的功能——對(duì)于TXT文本文件的可視化讀取.由于軟件中對(duì)于sdcard里面的文件的讀取可以是從各種各樣的界面上獲取要讀取的TXT文件資源,比如可以從本地管理列表直接讀取,也可以從最近閱讀列表讀取,或者是從閱讀界面來(lái)讀取該文本的書(shū)簽從而讀取文本文件的某一段.所以,通過(guò)Android的Intent(意圖方式)傳遞數(shù)據(jù),數(shù)據(jù)包括了實(shí)現(xiàn)本界面的Activity類(lèi)名,也包括了要閱讀文本的書(shū)名,還有就是要讀取文件的開(kāi)始頁(yè)碼比例。如果是非進(jìn)度跳轉(zhuǎn)功能,或者是書(shū)簽的功能則默認(rèn)進(jìn)度讀取開(kāi)始頁(yè)碼也第一頁(yè)。而這些數(shù)據(jù)則通過(guò)封裝到某個(gè)對(duì)象中,用bundle傳遞給Intent,再通過(guò)Intent轉(zhuǎn)發(fā)數(shù)據(jù)。以下便是通過(guò)BitmapFactory工廠(chǎng)封裝了一些繪制閱讀背景的方法的部分代碼實(shí)現(xiàn):mPageWidget。setBitmaps(mCurPageBitmap,mNextPageBitmap);mPageWidget。setOnTouchListener(newOnTouchListener(){@OverridepublicbooleanonTouch(Viewv,MotionEvente){booleanret=false;if(v==mPageWidget){if(e。getAction()==MotionEvent.ACTION_DOWN){mPageWidget。abortAnimation();mPageWidget。calcCornerXY(e。getX(),e。getY());pagefactory.onDraw(mCurPageCanvas);if(mPageWidget.DragToRight()){try{pagefactory.prePage();?? ? ?}cat(yī)ch(IOExceptione1){? ? ?e1。printStackTrace();? ????}???? if(pagefactory.isfirstPage())returnfalse;pagefactory。onDraw(mNextPageCanvas);? ?? ?}else{try{pagefactory。nextPage();? ? ???}catch(IOExceptione1){? ? ? e1。printStackTrace(); ?? ? }if(pagefactory。islastPage())returnfalse;pagefactory.onDraw(mNextPageCanvas); ?????}mPageWidget。setBitmaps(mCurPageBitmap,mNextPageBitmap);? ? }?? ??ret=mPageWidget.doTouchEvent(e);returnret;?? }returnfalse; ? }??}); }開(kāi)始獲取文件名開(kāi)始獲取文件名初始頁(yè)面是否為%1?隨機(jī)I/O流打開(kāi)結(jié)束I/O流打開(kāi)是否 ? 圖5-2隨機(jī)流打開(kāi)文件流程圖5。4。4menu按鈕功能的實(shí)現(xiàn)?添加書(shū)簽功能—-作為一款電子書(shū)閱讀器軟件,這個(gè)功能是個(gè)輕松快捷而且不可避免的功能,它能夠?qū)㈤L(zhǎng)篇的文本文件斷點(diǎn)記錄。如果用戶(hù)在長(zhǎng)時(shí)間的閱讀過(guò)程中感覺(jué)到疲乏,但是文件依然沒(méi)法短時(shí)間內(nèi)看完,為了方便下次閱讀則將當(dāng)前頁(yè)面記錄,下次則可以直接點(diǎn)擊進(jìn)入需要的頁(yè)面閱讀。該功能通過(guò)記錄了文件的總字節(jié)長(zhǎng)度及當(dāng)前的閱讀長(zhǎng)度進(jìn)行百分比計(jì)算。當(dāng)前頁(yè)面的字節(jié)則是通過(guò)之前已經(jīng)計(jì)算好了的字體大小,每頁(yè)會(huì)大概的存放多少字節(jié)數(shù)。privat(yī)evoidsaveBookMarkDialog(){finalDialogd=newDialog(turntest.this); d。setTitle(”添加書(shū)簽");??d.setContentView(R.layout.bookmark_dialog);finalEditTextet=(EditText)d。findViewById(R.id。bmet);finalButtonsure=(Button)d.findViewById(R.id.bmsure);finalButtoncancel=(Button)d。findViewById(R.id.bmcancel);//確定動(dòng)作? sure.setOnClickListener(newView。OnClickListener(){publicvoidonClick(Viewv){? ?Stringbmn=et。getText()。toString();if(bmn.length()<1){??? d.dismiss();?? ?d。show(); ? ?}else{if(bmn.length()〉10){? ? bmn.substring(0,10);? ? } ? BookMarkbm=newBookMark(); ? ?bm。setBookPat(yī)h(txtname);? ? bm。setMarkName(bmn); ?? ?bm.setCurrentOffset(pagefactory。m_mbBufEnd); ? bm.setSaveTime(Dat(yī)eUtil。dateToString(newDate()));mHelper=newCRDBHelper(getApplicat(yī)ionContext());operateResult=mHelper.addBookMark(bm);mHelper.close();if(operateResult){? ?? ?Toast。makeText(turntest.this,"添加成功",1000)。show(); ???}else{ ??Toast。makeText(turntest.this,”添加失敗",1000).show(); ??? }?????d.dismiss(); ? }? } });以下是查找書(shū)簽及實(shí)現(xiàn)跳轉(zhuǎn)的部分代碼實(shí)現(xiàn):list=newArrayList〈String〉();for(inti=0;i<mBookMarkList.size();i++){ ? Stringmark=mBookMarkList.get(i).getMarkName()+”"+mBookMarkList。get(i)。getSaveTime();list。add(mark);?? ?}list_tag=(ListView)findViewById(R.id。list_tag);adapter=newArrayAdapter(ShowBookmark.this,list_tag.setAdapter(adapter);//短按跳到書(shū)簽list_tag。setOnItemClickListener(newOnItemClickListener(){@OverridepublicvoidonItemClick(AdapterView<?>arg0,Viewarg1,intarg2,longarg3){//獲取到所點(diǎn)擊的書(shū)簽的定位intOffset=mBookMarkList.get(arg2).getCurrentOffset(); ? IntentmIntent=newIntent(ShowBookmark.this,turntest.class); ??BundlemB=newBundle(); ? mB。putString("Activity”,”ShowBookmarkActivity”); ?? mB.putInt("Offset",Offset);? ?mIntent。putExtras(mB); ? startActivity(mIntent); ? ??finish();???} });刪除書(shū)簽:該功能就是簡(jiǎn)單的運(yùn)用對(duì)于書(shū)簽的SQLite數(shù)據(jù)庫(kù)操作,通過(guò)對(duì)于ListView組件的長(zhǎng)按事件添加監(jiān)聽(tīng),程序自動(dòng)生成對(duì)話(huà)框。以下是部分代碼實(shí)現(xiàn):list_tag.setOnI(lǐng)temLongClickListener(newOnI(lǐng)temLongClickListener(){@OverridepublicbooleanonI(lǐng)temLongClick(AdapterView〈?〉arg0,Viewarg1,intarg2,longarg3){finalintpos=arg2;newAlertDialog.Builder(ShowBookmark.this)。setTitle("提示”) .setMessage("刪除該書(shū)簽”) ? ?.setPositiveButton("確定",newOnClickListener(){@OverridepublicvoidonClick(DialogInterfacedialog,intwhich){booleanb=mHelper。deleteBookMark(mBookMarkList.get(pos).getBookMarkId());if(b&&mBookMarkList。size()〉0){list。remove(pos);adapter.notifyDat(yī)aSetChanged();?? ??} ???} ? })。setNegativeButton("取消",newOnClickListener(){@OverridepublicvoidonClick(DialogInterfacedialog,intwhich){ ????dialog.dismiss();? ???}?? ?})。show();returnfalse;?? }? });//退出6。1功能界面打開(kāi)軟件,會(huì)從Logo界面自動(dòng)跳轉(zhuǎn)到該功能界面,該功能的實(shí)現(xiàn)只是簡(jiǎn)單的通過(guò)Android系統(tǒng)的界面設(shè)計(jì),通過(guò)對(duì)其TabHost選項(xiàng)卡組件的運(yùn)用將界面縱向平行的設(shè)計(jì)為三個(gè)覆蓋的界面,點(diǎn)擊則切換成指定的選項(xiàng)界面,如圖5—1:圖5-1功能界面6.2書(shū)籍選擇主界面打開(kāi)軟件,軟件就自動(dòng)加載sd卡上的txt文檔,該列表通過(guò)獲?。粒睿鋜oid系統(tǒng)的Sdcard的路徑然后獲取到里面的所有文件,然后通過(guò)文件名后綴來(lái)判別是否為。TXT結(jié)尾的文件將其添加進(jìn)入數(shù)據(jù)庫(kù),然后通過(guò)數(shù)據(jù)庫(kù)查詢(xún)列出所有該書(shū)籍表里面的集合從而列出要選擇的文檔,如圖5—2:圖5—2書(shū)籍選擇界面6.3用戶(hù)閱讀界面用戶(hù)左鍵單擊要閱讀的電子書(shū)籍,進(jìn)入由Android的畫(huà)筆類(lèi),通過(guò)調(diào)用BitmapFactory工廠(chǎng)方法onDraw繪制動(dòng)態(tài)頁(yè)面效果,畫(huà)面產(chǎn)生獲取頁(yè)面坐標(biāo)事件,根據(jù)坐標(biāo)來(lái)判斷是向前翻頁(yè)還是向后翻頁(yè),如圖5—3是向后翻頁(yè):圖5—3用戶(hù)閱讀界面6.4菜單點(diǎn)擊menu按鈕,就回出現(xiàn)選擇界面,增加書(shū)簽、查看書(shū)簽、退出閱讀。如圖5—4:圖5-4Menu菜單功能6.5書(shū)簽操作點(diǎn)擊添加書(shū)簽,會(huì)出現(xiàn)一個(gè)添加書(shū)簽的界面,如圖5-5圖5—5添加書(shū)簽點(diǎn)擊查看標(biāo)簽就會(huì)出現(xiàn)相應(yīng)文檔的標(biāo)簽列表,如圖5-6圖5-6書(shū)簽列表長(zhǎng)按某個(gè)選項(xiàng)就會(huì)刪除標(biāo)簽.如圖5-6圖5—7刪除書(shū)簽如果取消則返回標(biāo)簽界面,如果確定則刪除書(shū)簽。6。6書(shū)籍操作刪除文檔界面,從5-1圖中刪除xyy2.txt長(zhǎng)按菜單鍵,該功能是對(duì)于A(yíng)ndroid組件ListView的長(zhǎng)按事件的添加監(jiān)聽(tīng)功能,如圖5-8:圖5-8刪除書(shū)籍6.7最近閱讀在閱讀過(guò)得書(shū)籍會(huì)添加進(jìn)最近閱讀數(shù)據(jù)庫(kù),方便用戶(hù)后期直接點(diǎn)擊進(jìn)入閱讀,如圖5—9:圖5-9最近閱讀列表6.8用戶(hù)登錄通過(guò)與服務(wù)器的連接獲取服務(wù)器提供了最新最熱的書(shū)籍推薦,先登陸可以記錄該用戶(hù)的下載記錄。如圖:圖5-10在線(xiàn)登陸界面6.9在線(xiàn)中心圖5—11服務(wù)器獲取的最新資源6。10性能分析6.10.1概述及方案特點(diǎn)本軟件是利用java語(yǔ)言在android平臺(tái)上實(shí)現(xiàn)的一款閱讀軟件,使用起來(lái)方便,非常容易使用,也方便用戶(hù)的操作,最重要的特點(diǎn)就是實(shí)現(xiàn)簡(jiǎn)單,沒(méi)有過(guò)于復(fù)雜冗余的操作。數(shù)據(jù)庫(kù)是使用sqlite3來(lái)進(jìn)行存數(shù)。方案特點(diǎn):(1)系統(tǒng)先進(jìn)性本系統(tǒng)的先進(jìn)性主要體現(xiàn)在能觸屏翻頁(yè),能顯示已經(jīng)閱讀的進(jìn)度,大大減少了占用用戶(hù)的時(shí)間,而且閱讀起來(lái)比較方便快捷。(2)系統(tǒng)可擴(kuò)展性由于本系統(tǒng)是基于android系統(tǒng)手機(jī)開(kāi)發(fā)的軟件,用java語(yǔ)言實(shí)現(xiàn),無(wú)論是可讀性,可維護(hù)性,還是可擴(kuò)展性,都是比較優(yōu)越的。(3)智能性增加列表顯示功能,以便實(shí)現(xiàn)信息傳遞的快速性、智能性(4)可維護(hù)性安裝簡(jiǎn)單、維護(hù)方便。人性化的用戶(hù)界面,操作簡(jiǎn)單、易用6。10.2性能本系統(tǒng)響應(yīng)時(shí)間、更新處理時(shí)間、數(shù)據(jù)的轉(zhuǎn)換和傳送時(shí)間取決于硬件的性能,不過(guò)一般情況下是用戶(hù)的允許等待時(shí)間.其設(shè)置的是觸屏自動(dòng)翻頁(yè),就像我們翻閱書(shū)籍的時(shí)候一頁(yè)一頁(yè)的反動(dòng),更符合人們的思想邏輯,比一行一行的翻閱更為靈活。服務(wù)器連接則通過(guò)HTTP協(xié)議,采用多線(xiàn)程下載機(jī)制快速獲取資源。參考文獻(xiàn)[1]張白一,崔尚森《面向?qū)ο蟪绦蛟O(shè)計(jì)》(java第二版)[M]西安電子科技大學(xué)出版,2006。01[2]張孝祥《Java就業(yè)培訓(xùn)教程》[M]清華大學(xué)出版社2007。07。01[3]李興華《Java開(kāi)發(fā)實(shí)戰(zhàn)經(jīng)典》[M]清華大學(xué)出版社2009.08。01[4]李鐘尉,周小彤《Java從入門(mén)到精通》(第二版)[M]清華大學(xué)出版社2010.07[5]孫鑫《JavaWeb開(kāi)發(fā)詳解》[M]電子工業(yè)出版社2006。04。01[6]閻宏《Java與模式》[M]電子工業(yè)出版社2002.10.01[7]韋斯,馮舜璽《數(shù)據(jù)結(jié)構(gòu)與算法分析:Java語(yǔ)言描述》(第2版)[M]機(jī)械工業(yè)出版社2009.01。01 [8]埃史爾,陳昊鵬《Java編程思想》[M]機(jī)械工業(yè)出版社2007.06.01[9]王世江,蓋索林《GoogleAndroid開(kāi)發(fā)入門(mén)指南》[M]人民郵電出版社2009。11?[10]李剛《瘋狂Android講義》[M]電子工業(yè)出版社2011。6.22?[11]RetoMeier《ProfessionalAndroid2ApplicationDevelopment》[M]清華大學(xué)出版社2010。12.01 [12]RickRogers,BlakeMeike,ZiqurdMednieks《Android應(yīng)用開(kāi)發(fā)》[M]人民郵電出版社2010。09.01[13]GrantAllen,MikeOwens《TheDefinitiveGuidetoSQLite(SecondEdition)》[M]電子工業(yè)出版社2012.01.01 [14]公磊,周聰《基于A(yíng)ndroid的移動(dòng)終端應(yīng)用程序開(kāi)發(fā)與研究》《計(jì)算機(jī)與現(xiàn)代化》[J]2008年第8期[15]劉衛(wèi)國(guó)《Android的架構(gòu)與應(yīng)用開(kāi)發(fā)研究》[J]《計(jì)算機(jī)系統(tǒng)應(yīng)用》2008年第11期摘要在科技日益發(fā)達(dá)的今天,社會(huì)競(jìng)爭(zhēng)越來(lái)越激烈,這要求人們不斷的獲取信息來(lái)充實(shí)自己.這就要求人們能隨時(shí)隨地的了解并獲取所需的信息。與此同時(shí),手機(jī)的功能越來(lái)越強(qiáng)大,將脫離傳統(tǒng)的打電話(huà)、發(fā)短信等基本的功能,在這種情況下,新聞閱讀器可以滿(mǎn)足人們對(duì)外界信息了解的需求。本系統(tǒng)是在A(yíng)ndroid平臺(tái)下設(shè)計(jì)的,在GoogleAndroid平臺(tái)的SDK2。1環(huán)境下,運(yùn)用Eclipse進(jìn)行開(kāi)發(fā)。論文概括的介紹了Android開(kāi)發(fā)的流程,并重點(diǎn)的介紹了基于A(yíng)ndroid平臺(tái)的RSS閱讀器的開(kāi)發(fā)過(guò)程。論文首先介紹了課題的研究背景、研究現(xiàn)狀和主要研究?jī)?nèi)容;然后對(duì)系統(tǒng)中用到的理論知識(shí)和相關(guān)技術(shù)進(jìn)行了詳細(xì)的闡述,包括Android平臺(tái)的相關(guān)理論知識(shí)、Android環(huán)境的搭建、數(shù)據(jù)源的選取、數(shù)據(jù)的解析方法以及系統(tǒng)的詳細(xì)實(shí)現(xiàn)過(guò)程。系統(tǒng)選用了新浪RSS源以及pull解析方法。系統(tǒng)完成以后,可以實(shí)現(xiàn)RSS閱讀器的基本功能,論文闡述了具體實(shí)現(xiàn)方法以及相應(yīng)的關(guān)鍵代碼段。本課題完成設(shè)計(jì)實(shí)現(xiàn)的系統(tǒng)已經(jīng)試運(yùn)行正常。用戶(hù)使用該系統(tǒng)可以方便、及時(shí)的閱讀到自己感興趣的新聞關(guān)鍵詞:RSS閱讀器,Android操作系統(tǒng),Pull解析算法AbstractIt'smoreadvancedintechnologytoday,andthesocialcompetitionismoreandmorefierce,whichrequiresconstantaccesstoinformationtopeopletoenrichthemselves.Atthesametime,mobilephonesbecomemoreandmorepowerful,willbreakawayfromtraditionalphonecalls,sendingmessagesandotherbasicfunctions。Inthiscase,thenewsreaderistomeetthepeople’sunderstandingofthenee(cuò)dsofoutsideinformation。ThissystemisdesignedintheAndroidplatform,comeswiththeGoogleAndroidPl(wèi)atformSDK2.1environment,theuseofEclipsefordevelopment.ThispaperdescribesthegeneralprocessofAndroiddevelopment,andfocusontroductionoftheAndroidplatform—basedRSSreaderdevelopmentprocess.Thispaperintroducestheresearchbackground,currentsituat(yī)ionandmaincontent;andthendescribesthetheoreticalknowledgeandrelatedtechnologiesusedinthesystemindetail,includingthetheoryofAndroidplatform,buildingAndroidenvironment,theselectionofdatasources,dataanalyticalmethodsandthedetailedimplementat(yī)ionprocess.ThesystemselectsSinaRSSsourceandPullparsingmethod.Aftercompletingthesystem,youcanachievethebasicfunctionsofRSSReader,thepaperdescribesthespecificimplementationmethodandthecorrespondingkeycode.Thedesignandimplementationofthesystemhasbeentestrunnormally.Userscaneasilyusethesystem,readtimelynewsofpersonalinterest.Keywords:RSSreader,AndroidOperatingSystem,Pullparsingmethod目錄TOC\o"1-2”\h\z\u摘要PAGEREF_Toc295838487\hIAbstractPAGEREF_Toc295838488\hIIHYPERLINK\l"_Toc295838489"1緒論PAGEREF_Toc295838489\h11.1課題背景PAGEREF_Toc295838490\h1HYPERLINK\l"_Toc295838491”1.2課題研究的目的和意義PAGEREF_Toc295838491\h21.3研究現(xiàn)狀PAGEREF_Toc295838492\h3HYPERLINK\l"_Toc295838493"2Android相關(guān)理論知識(shí)PAGEREF_Toc295838493\h6HYPERLINK\l”_Toc295838494"2。1Android平臺(tái)介紹295838494\h6HYPERLINK\l”_Toc295838495”2。2Android開(kāi)發(fā)環(huán)境的搭建PAGEREF_Toc295838495\h143相關(guān)技術(shù)理論P(yáng)AGEREF_Toc295838496\h193.1RSS技術(shù)簡(jiǎn)介PAGEREF_Toc295838497\h193.2Pull解析算法研究PAGEREF_Toc295838498\h20HYPERLINK\l"_Toc295838499”4Android平臺(tái)下RSS閱讀器的詳細(xì)分析設(shè)計(jì)與實(shí)現(xiàn)PAGEREF_Toc295838499\h22HYPERLINK\l"_Toc295838500"4.1問(wèn)題的提出PAGEREF_Toc295838500\h22HYPERLINK\l"_Toc295838501”4。2解決方案PAGEREF_Toc295838501\h23HYPERLINK\l”_Toc295838502"4.3主要功能詳細(xì)設(shè)計(jì)與實(shí)現(xiàn)PAGEREF_Toc295838502\h24HYPERLINK\l"_Toc295838503"5總結(jié)與展望PAGEREF_Toc295838503\h39HYPERLINK\l”_Toc295838504"5。1本文工作總結(jié)PAGEREF_Toc295838504\h39HYPERLINK\l"_Toc295838505"5.2下一步工作展望PAGEREF_Toc295838505\h39致謝PAGEREF_Toc295838506\h40參考文獻(xiàn)PAGEREF_Toc295838507\h41緒論課題背景現(xiàn)在手機(jī)已經(jīng)成為了人們生活中不可或缺的通訊設(shè)備,沒(méi)有手機(jī)有時(shí)會(huì)讓人覺(jué)得寸步難行。手機(jī)將脫離傳統(tǒng)的打電話(huà)、發(fā)短信等基本的功能,而基于智能手機(jī)強(qiáng)大的處理能力和可擴(kuò)展能力以及3G網(wǎng)絡(luò)高速數(shù)據(jù)傳輸,越來(lái)越多的功能和業(yè)務(wù)將被開(kāi)發(fā)出來(lái)并大規(guī)模的應(yīng)用.正因?yàn)槿绱?,?dāng)全世界的目光聚焦的時(shí)候,Google于2007年11月5日宣布推出基于Linux平臺(tái)的開(kāi)源手機(jī)操作系統(tǒng),號(hào)稱(chēng)首個(gè)為移動(dòng)終端打造的真正開(kāi)發(fā)和完整的移動(dòng)軟件--Android。Android是基于Linux內(nèi)核的軟件平臺(tái)和操作系統(tǒng),早期由Google開(kāi)發(fā),后由開(kāi)放手機(jī)聯(lián)盟(OpenHandsetAlliance)開(kāi)發(fā)。它采用了軟件層(softwarestack,又名以軟件疊層)的構(gòu)架,主要分為三部分。底層以L(fǎng)inux內(nèi)核作為基礎(chǔ),由C語(yǔ)言開(kāi)發(fā),只提供基礎(chǔ)功能.中間層包括函數(shù)庫(kù)Library和虛擬機(jī)VirtualMachine,由C++開(kāi)發(fā).最上層是各種應(yīng)用軟件,包括通話(huà)程序,短信程序等,應(yīng)用軟件則由各公司自行開(kāi)發(fā),由Java編寫(xiě)。Android不僅僅只是一個(gè)操作系統(tǒng),它包括了:1、經(jīng)過(guò)Google剪裁和調(diào)優(yōu)的LinuxKernel,對(duì)于掌上設(shè)備的硬件提供了很好的支持.Google在Linux方面的應(yīng)用能力不容置疑,Google公司幾乎所有的幾十萬(wàn)服務(wù)器全部是自己修改過(guò)的Linux操作系統(tǒng).2、經(jīng)過(guò)Google修改的Java虛擬機(jī)Dalvik,是基于A(yíng)pacheHarmony虛擬機(jī)版本進(jìn)行改良而來(lái),能夠提供極高的執(zhí)行性能.有了Java虛擬機(jī),大部分Java核心類(lèi)庫(kù)都已經(jīng)可以直接運(yùn)行.3、大量立即可用的類(lèi)庫(kù)和應(yīng)用軟件,例如瀏覽器Webkit,數(shù)據(jù)庫(kù)SQLite,讓你可輕易開(kāi)發(fā)出來(lái)媲美于桌面應(yīng)用復(fù)雜度的手機(jī)軟件.4、Google已經(jīng)開(kāi)發(fā)好了大量現(xiàn)成的應(yīng)用軟件,同時(shí)可以直接使用Google很多在線(xiàn)服務(wù)。5、Google提供了基于Eclipse的完整開(kāi)發(fā)環(huán)境、模擬器、文檔、幫助、示例等將極大推動(dòng)Android快速的推廣和發(fā)展?;贏(yíng)ndroid眾多的優(yōu)點(diǎn),圍繞Android形成了一個(gè)移動(dòng)手機(jī)聯(lián)盟,主要的手機(jī)廠(chǎng)商幾乎全部在列,而此聯(lián)盟在極大的推動(dòng)Android平臺(tái)的推廣和發(fā)展,在未來(lái)的幾年必將大方異彩,將極大的推動(dòng)整個(gè)手機(jī)操作系統(tǒng)甚至是互聯(lián)網(wǎng)乃至軟件行業(yè)的發(fā)展。課題研究的目的和意義Android這個(gè)平臺(tái)對(duì)于Google對(duì)于大眾的意義不在于手機(jī)本身,Android存在的目的也不在于挑起手機(jī)操作系統(tǒng)之間的混戰(zhàn),而在于推動(dòng)移動(dòng)互聯(lián)網(wǎng)產(chǎn)業(yè)鏈的迅速成型。具有開(kāi)源特性的Android平臺(tái)打破了之前Symbian、windowsmobile等操作系統(tǒng)收取高額的授權(quán)費(fèi)用的模式,使得只能手機(jī)成本大大的降低;而正是由于它開(kāi)發(fā)源代碼,使得手機(jī)產(chǎn)生更多個(gè)性化的應(yīng)用。同時(shí),合作方能夠在這里得到利潤(rùn)或者創(chuàng)造價(jià)值,手機(jī)軟件行業(yè)得到維護(hù)協(xié)調(diào)發(fā)展.以Google、蘋(píng)果和諾基亞為中心各自形成的生態(tài)鏈將以原來(lái)數(shù)倍的速度推動(dòng)移動(dòng)互聯(lián)網(wǎng)的發(fā)展,這正是Google推出Android平臺(tái)的意義,也是Android平臺(tái)存在的使命.而作為Android平臺(tái)成員之一的中國(guó)移動(dòng)也投資成立了一家通訊公司,專(zhuān)門(mén)從事Google手機(jī)軟件的應(yīng)用以及本地化的軟件的開(kāi)發(fā),比如將在Google手機(jī)平臺(tái)上添加飛信、輸入法等一系列符合國(guó)內(nèi)用戶(hù)使用特色的功能。國(guó)內(nèi)眾多企業(yè)也將眼光投入到Android上面,并啟動(dòng)了相關(guān)的計(jì)劃來(lái)深入的理解并發(fā)展Android。更多的手機(jī)軟件開(kāi)發(fā)企業(yè)已經(jīng)或者籌備著將公司進(jìn)行轉(zhuǎn)型,從其方向的開(kāi)發(fā)轉(zhuǎn)向到Android的開(kāi)發(fā)。綜上所述,無(wú)論是在國(guó)內(nèi)還是在國(guó)外,Android平臺(tái)對(duì)手機(jī)軟件行業(yè)和移動(dòng)手機(jī)平臺(tái)將發(fā)揮極大地推動(dòng)作用,而在未來(lái)的幾年或者一段時(shí)間內(nèi),Android將越發(fā)的凸顯自己的重要性?;诖?我們有必要通過(guò)進(jìn)行相關(guān)的研究來(lái)了解Android平臺(tái),來(lái)了解開(kāi)發(fā)Android的那一大批人的先進(jìn)的理念和思想,并通過(guò)這些來(lái)了解手機(jī)軟件行業(yè),進(jìn)而了解未來(lái)無(wú)移動(dòng)互聯(lián)網(wǎng)的發(fā)展趨勢(shì),從而更好的適應(yīng)時(shí)代的需要。研究現(xiàn)狀本節(jié)對(duì)各大站點(diǎn)對(duì)RSS的支持情況以及現(xiàn)有RSS閱讀器進(jìn)行了分析和綜合,提出了系統(tǒng)實(shí)現(xiàn)可以借鑒的地方.各種站點(diǎn)對(duì)RSS的支持情況目前支持RSS的站點(diǎn)主要分為下面幾種:新聞資訊類(lèi)站點(diǎn)、BSP站點(diǎn)、獨(dú)立博客站點(diǎn)、其他站點(diǎn)。新聞資訊類(lèi)站點(diǎn)指的是傳統(tǒng)的門(mén)戶(hù)網(wǎng)站,這類(lèi)門(mén)戶(hù)網(wǎng)站一般是站長(zhǎng)管理式的,信息涉及非常廣泛、來(lái)源比較集中、權(quán)威性比較高,一直受到傳統(tǒng)互聯(lián)網(wǎng)用戶(hù)的青睞。用戶(hù)可以從這一類(lèi)網(wǎng)站了解到各種需要的綜合信息.幾大典型的例子有新浪門(mén)戶(hù)、搜狐門(mén)戶(hù)和騰訊門(mén)戶(hù)等等.為了迎合用戶(hù)的需要這類(lèi)網(wǎng)站一般也有推出RSS訂閱功能,這類(lèi)網(wǎng)站的信息更新非常頻繁、信息量也比較巨大,因此,用戶(hù)不怎么傾向于訂閱此類(lèi)網(wǎng)站.BSP站點(diǎn),即Blogserviceprovider(博客服務(wù)提供商),這類(lèi)站點(diǎn)為用戶(hù)提供博客服務(wù),除了提供基本的博客添加、評(píng)論之外,大部分BSP都會(huì)針對(duì)某個(gè)博客提供RSS訂閱功能。比如新浪博客和博客園等等。這類(lèi)網(wǎng)站在RSS信息更新方面的特點(diǎn)是:更新相對(duì)不頻繁、也不規(guī)律.但是用戶(hù)比較傾向于訂閱這類(lèi)網(wǎng)站,因?yàn)樵S多博客的話(huà)題是針對(duì)某一特定領(lǐng)域的,而用戶(hù)的閱讀傾向往往也是針對(duì)某一領(lǐng)域的。獨(dú)立博客站點(diǎn),指的是博主自己申請(qǐng)域名,自己開(kāi)通并且自己維護(hù)的博客。這類(lèi)博客站點(diǎn)一般使用已有的博客系統(tǒng)(比如wordpress),而這些博客系統(tǒng)一般都會(huì)提供RSS訂閱功能。在信息方面,獨(dú)立博客一直是IT從業(yè)人員比較青睞的網(wǎng)站,比如月光博客、小眾軟件等等。在國(guó)外,這一類(lèi)博客站點(diǎn)更加流行。其他站點(diǎn),指的是迎合用戶(hù)特殊需求的站點(diǎn)。這類(lèi)站點(diǎn)提供了某些定期更新的特殊信息,比如天氣預(yù)報(bào)信息,學(xué)校就業(yè)信息,學(xué)院通知信息。這類(lèi)信息不適合所有用戶(hù),但就算如此,提供RSS訂閱服務(wù)能使得關(guān)心它的用戶(hù)一勞永逸。這類(lèi)信息更新的頻繁度往往沒(méi)有什么規(guī)律。對(duì)RSS源站點(diǎn)信息,我們總結(jié)如表1.1所示:表SEQ表格\*ARABIC1.1各種RSS源網(wǎng)站情況對(duì)比RSS源站點(diǎn)用戶(hù)群體RSS支持程度更新頻繁程度新聞門(mén)戶(hù)大眾用戶(hù)一般頻繁BSP站點(diǎn)專(zhuān)注某個(gè)領(lǐng)域的用戶(hù)好不頻繁獨(dú)立博客站點(diǎn)專(zhuān)業(yè)用戶(hù)非常好不頻繁其他站點(diǎn)具有特殊需求的用戶(hù)不好不確定移動(dòng)閱讀器實(shí)現(xiàn)方案離線(xiàn)閱讀器離線(xiàn)RSS閱讀器主要指的是用一個(gè)客戶(hù)端軟件進(jìn)行RSS閱讀,例如瀏覽器自帶的RSS閱讀,以及桌面RSS閱讀器。這類(lèi)閱讀器的主要優(yōu)點(diǎn)是:(1)通過(guò)本地緩存將內(nèi)容呈現(xiàn)給用戶(hù),使得RSS閱讀不受網(wǎng)絡(luò)影響。(2)響應(yīng)速度快,加載速度快.它的主要缺點(diǎn)是:(1)RSS信息的獲取由客戶(hù)端完成,增加了客戶(hù)端的處理負(fù)擔(dān)。(2)由于訂閱信息都在本地,因此不便于用戶(hù)轉(zhuǎn)移數(shù)據(jù)。對(duì)手機(jī)來(lái)說(shuō),計(jì)算能力和內(nèi)存空間屬于稀缺資源,因此離線(xiàn)RSS閱讀器實(shí)現(xiàn)方案并不適合手機(jī).此外,離線(xiàn)閱讀器的實(shí)現(xiàn)方案和互聯(lián)網(wǎng)的發(fā)展趨勢(shì)也是背道而馳的。在線(xiàn)閱讀器在線(xiàn)閱讀器大多是通過(guò)瀏覽器訪(fǎng)問(wèn)的一類(lèi)閱讀器,對(duì)于在線(xiàn)閱讀器來(lái)說(shuō),各個(gè)訂閱網(wǎng)站信息的獲取是由提供服務(wù)的一方完成的,客戶(hù)端只負(fù)責(zé)接收服務(wù)端返回的數(shù)據(jù)并且正確顯示。在線(xiàn)閱讀器的特點(diǎn)是依靠網(wǎng)絡(luò)、極大化的減輕客戶(hù)端的負(fù)擔(dān)、便于用戶(hù)在不同客戶(hù)端使用軟件及其數(shù)據(jù)等等。隨著web2.0的發(fā)展,一些在線(xiàn)RSS閱讀器已經(jīng)進(jìn)入人們的視野,典型的范例有Google閱讀器、鮮果網(wǎng)、抓蝦網(wǎng)和哪吒網(wǎng),這些網(wǎng)站也相繼都推出了各自的手機(jī)版。這些手機(jī)版的RSS閱讀器都是我們需要借鑒的。但是,對(duì)普通用戶(hù)來(lái)說(shuō),RSS是個(gè)比較難以理解的東西(尤其是在國(guó)內(nèi)),因此這類(lèi)手機(jī)閱讀器的普及是個(gè)重大難題,我們的工作重點(diǎn),就是屏蔽RSS閱讀器的技術(shù)細(xì)節(jié),給用戶(hù)提供直觀(guān)的、全面的、易懂的服務(wù)。Android相關(guān)理論知識(shí)Android平臺(tái)介紹Android系統(tǒng)簡(jiǎn)介Android一詞的本義指“機(jī)器人",同時(shí)也是Google于2007年11月5日宣布的基于Linux平臺(tái)的開(kāi)源手機(jī)操作系統(tǒng)的名稱(chēng).它包括操作系統(tǒng)、用戶(hù)界面和應(yīng)用程序-—移動(dòng)電話(huà)工作所需的全部軟件,而且不存在任何以往阻礙移動(dòng)產(chǎn)業(yè)創(chuàng)新的專(zhuān)有權(quán)障礙。Googleandroid平臺(tái)的系統(tǒng)構(gòu)架圖如圖2。1所示:圖2.1Googleandroid平臺(tái)的系統(tǒng)構(gòu)架圖雖然Android是Google公司推出的產(chǎn)品,但更貼切的說(shuō)法應(yīng)該是開(kāi)放手機(jī)聯(lián)盟的產(chǎn)品。開(kāi)放手機(jī)聯(lián)盟是由大約30家公司組成的聯(lián)盟,致力于將“更好的”和“開(kāi)放的”手機(jī)推向市場(chǎng)。其網(wǎng)站上的一句話(huà)很好的闡述了這一點(diǎn):“Android是本著成為第一個(gè)開(kāi)放、完整、免費(fèi)、專(zhuān)門(mén)針對(duì)移動(dòng)設(shè)備開(kāi)發(fā)的平臺(tái)這一目標(biāo),完全從零開(kāi)始創(chuàng)建的?!盇ndroid系統(tǒng)架構(gòu)應(yīng)用程序Android以Java為編程語(yǔ)言,從接口到功能,都有層出不窮的變化,其中Activity等同于J2ME的MIDlet,一個(gè)Activity類(lèi)(class)負(fù)責(zé)創(chuàng)建視窗(window),一個(gè)活動(dòng)中的Activity就是在foreground(前景)模式,背景運(yùn)行的程序叫做Service。兩者之間通過(guò)由ServiceConnection和AIDL連結(jié),達(dá)到復(fù)數(shù)程序同時(shí)運(yùn)行的效果。如果運(yùn)行中的Activity全部畫(huà)面被其他Activity取代時(shí),該Activity便被停止(stopped),甚至被系統(tǒng)清除(kill)。View等同于J2ME的Displayable,程序人員可以通過(guò)View類(lèi)與“XMLlayout”檔將UI放置在視窗上,Android1。5的版本可以利用View打造出所謂的Widgets,其實(shí)Widget只是View的一種,所以可以使用xml來(lái)設(shè)計(jì)layout,HTC的AndroidHero手機(jī)即含有大量的widget。至于ViewGroup是各種layout的基礎(chǔ)抽象類(lèi)(abstractclass),ViewGroup之內(nèi)還可以有ViewGroup。View的構(gòu)造函數(shù)不需要再Activity中調(diào)用,但是Displayable的是必須的,在A(yíng)ctivity中,要通過(guò)findViewById()來(lái)從XML中取得View,Android的View類(lèi)的顯示很大程度上是從XML中讀取的。View與事件(event)息息相關(guān),兩者之間通過(guò)Listener結(jié)合在一起,每一個(gè)View都可以注冊(cè)一個(gè)eventlistener,例如:當(dāng)View要處理用戶(hù)觸碰(touch)的事件時(shí),就要向Android框架注冊(cè)View.OnClickListener。另外還有Image等同于J2ME的BitMap。中介軟件操作系統(tǒng)與應(yīng)用程序的溝通橋梁,應(yīng)用分為兩層:函數(shù)層(Library)和虛擬機(jī)(VirtualMachine)。Bionic是Android改良libc的版本。Android同時(shí)包含了Webkit,所謂的Webkit就是AppleSafari瀏覽器背后的引擎。Surfaceflinger是就2D或3D的內(nèi)容顯示到屏幕上。Android使用工具鏈(Toolchain)為Google自制的BionicLibc。Android采用OpenCORE作為基礎(chǔ)多媒體框架。OpenCORE可分7大塊:PVPl(wèi)ayer、PVAuthor、Codec、PacketVideoMultimediaFramework(PVMF)、OperatingSystemCompatibilityLibrary(OSCL)、Common、OpenMAX.Android使用skia為核心圖形引擎,搭配OpenGL/ES.skia與LinuxCairo功能相當(dāng),但相較于LinuxCairo,skia功能還只是雛形的.2005年Skia公司被Google收購(gòu),2007年初,SkiaGL源碼被公開(kāi),目前Skia也是GoogleChrome的圖形引擎。Android的多媒體數(shù)據(jù)庫(kù)采用SQLite數(shù)據(jù)庫(kù)系統(tǒng)。數(shù)據(jù)庫(kù)又分為共用數(shù)據(jù)庫(kù)及私用數(shù)據(jù)庫(kù)。用戶(hù)可通過(guò)ContentResolver類(lèi)(Column)取得共用數(shù)據(jù)庫(kù)。Android的中間層多以Java實(shí)現(xiàn),并且采用特殊的Dalvik虛擬機(jī)(DalvikVirtualMachine).Dalvik虛擬機(jī)是一種“暫存器型態(tài)”(RegisterBased)的Java虛擬機(jī),變量皆存放于暫存器中,虛擬機(jī)的指令相對(duì)減少。Dalvik虛擬機(jī)可以有多個(gè)實(shí)例(instance),每個(gè)Android應(yīng)用程序都用一個(gè)自屬的Dalvik虛擬機(jī)來(lái)運(yùn)行,讓系統(tǒng)在運(yùn)行程序時(shí)可達(dá)到優(yōu)化。Dalvik虛擬機(jī)并非運(yùn)行Java字節(jié)碼(Bytecode),而是運(yùn)行一種稱(chēng)為.dex格式的文件.硬件抽象層Android的HAL(硬件抽象層)是能以封閉源碼形式提供硬件驅(qū)動(dòng)模塊.HAL的目的是為了把Androidframework與Linuxkernel隔開(kāi),讓?zhuān)粒頳roid不至過(guò)度依賴(lài)Linuxkernel,以達(dá)成kernelindependent的概念,也讓Androidframework的開(kāi)發(fā)能在不考慮驅(qū)動(dòng)程序?qū)崿F(xiàn)的前提下進(jìn)行發(fā)展。HALstub是一種代理人(proxy)的概念,stub是以*.so檔的形式存在。Stub向HAL“提供"操作函數(shù)(operations),并由Androidruntime向HAL取得stub的operations,再callback這些操作函數(shù)。HAL里包含了許多的stub(代理人)。Runtime只要說(shuō)明“類(lèi)型”,即moduleID,就可以取得操作函數(shù).編程語(yǔ)言Android是運(yùn)行于Linuxkernel之上,但并不是GNU/Linux。因?yàn)樵谝话鉍NU/Linux里支持的功能,Android大都沒(méi)有支持,包括Cairo、X11、Alsa、FFmpeg、GTK、Pango及Glibc等都被移除掉了。Android又以bionic取代Glibc、以Skia取代Cairo、再以opencore取代FFmpeg等等。Android為了達(dá)到商業(yè)應(yīng)用,必須移除被GNUGPL授權(quán)證所約束的部份,例如Android將驅(qū)動(dòng)程序移到userspace,使得Linuxdriver與Linuxkernel徹底分開(kāi)。bionic/libc/kernel/并非標(biāo)準(zhǔn)的kernelheaderfiles。Android的kernelheader是利用工具由Linuxkernelheader所產(chǎn)生的,這樣做是為了保留常數(shù)、數(shù)據(jù)結(jié)構(gòu)與宏。目前Android的Linuxkernel控制包括安全(Security),存儲(chǔ)器管理(MemoryManagement),程序管理(ProcessManagement),網(wǎng)絡(luò)堆棧(NetworkStack),驅(qū)動(dòng)程序模型(DriverModel)等.下載Android源碼之前,先要安裝其構(gòu)建工具Repo來(lái)初始化源碼。Repo是Android用來(lái)輔助Git工作的一個(gè)工具.Android系統(tǒng)的特點(diǎn)與功能Android系統(tǒng)的特點(diǎn)1、開(kāi)放性.Google與開(kāi)放手機(jī)聯(lián)盟合作開(kāi)發(fā)了Android,Google通過(guò)與運(yùn)行商、設(shè)備制造商、開(kāi)發(fā)商和其他有關(guān)各方面結(jié)成深層次的合作伙伴關(guān)系,希望通過(guò)建立標(biāo)準(zhǔn)化、開(kāi)放式的移動(dòng)電話(huà)軟件平臺(tái),在移動(dòng)產(chǎn)業(yè)形成一個(gè)開(kāi)放式的生態(tài)系統(tǒng)。2、應(yīng)用程序無(wú)界限.Android上的應(yīng)用可以通過(guò)標(biāo)準(zhǔn)API訪(fǎng)問(wèn)核心移動(dòng)設(shè)備功能.通過(guò)互聯(lián)網(wǎng),應(yīng)用程序可以聲明它們的功能可以提供給其他應(yīng)用程序使用.3、應(yīng)用程序是在平等的條件下創(chuàng)建的.移動(dòng)設(shè)備上的應(yīng)用程序可以被替換或擴(kuò)展,即使是撥號(hào)程序或主屏幕這樣的核心組件。4、應(yīng)用程序可以輕松地嵌入網(wǎng)絡(luò).應(yīng)用程序可以輕松地嵌入HTML、JavaScript和樣式表,還可以通過(guò)WebView顯示網(wǎng)絡(luò)內(nèi)容.5、應(yīng)用程序可以并行運(yùn)行。Android是一種完整的多任務(wù)環(huán)境,應(yīng)用程序可以在其中并行運(yùn)行。在后臺(tái)運(yùn)行時(shí),應(yīng)用程序可以生成通知以引起注意。Android系統(tǒng)的功能1、支持虛擬鍵盤(pán)。虛擬鍵盤(pán)的出現(xiàn)意味著基于A(yíng)ndroid1.5或以上版本的移動(dòng)設(shè)備可以同時(shí)支持物理鍵盤(pán)和虛擬鍵盤(pán)。2、使用Widget實(shí)現(xiàn)桌面的個(gè)性化??梢杂肳idget修飾自己的桌面。大多數(shù)小的web應(yīng)用都是從網(wǎng)絡(luò)上獲得實(shí)時(shí)數(shù)據(jù)并展示給用戶(hù)的.Android預(yù)裝了5個(gè)桌面Widget,包括數(shù)字時(shí)鐘、日歷、音樂(lè)播放器、相框和搜索。3、用在線(xiàn)文件夾快速游覽數(shù)據(jù)。類(lèi)似于OSXLeopard的QuickLook特征,Android的在線(xiàn)文件夾可顯示常見(jiàn)的數(shù)據(jù)條目,比如聯(lián)系人、喜歡的應(yīng)用、E—mail信息、播放列表、書(shū)簽、RSS源等,并不需要運(yùn)行系統(tǒng)程序處理特定的數(shù)據(jù)條目.4、視頻錄制和分享。Android還有錄制和分享視頻的功能,對(duì)回放和MPEG-4、3GP等視頻格式也有了更好的支持??梢酝ㄟ^(guò)E-mail、MMS或直接上傳到Y(jié)ouTu(píng)be等方式來(lái)分享視頻。5、圖片上傳。在線(xiàn)分享圖片需要的點(diǎn)擊更少。完成照相后,當(dāng)瀏覽圖片或選擇Google在線(xiàn)圖片服務(wù)Picasa時(shí),只需輕點(diǎn)“分享"就會(huì)擁有1Gb的免費(fèi)圖片存儲(chǔ)空間。6、更快、更兼容的游覽器.Android的基于Webkit內(nèi)核的游覽器帶來(lái)了重要的調(diào)速裝置(SpeedPumb),這得益于新的Wenkit渲染引擎和優(yōu)化的Java腳本編譯器(SquireFish).7、VoiceSearch語(yǔ)音搜索。帶有語(yǔ)音識(shí)別技術(shù)的Google手機(jī)已于2008年11月面世,它支持語(yǔ)音搜索功能.該功能增強(qiáng)了默認(rèn)的搜索能力,已超過(guò)純文本搜索。8、立體聲藍(lán)牙和免提電話(huà)。除了增強(qiáng)的免提電話(huà)體驗(yàn),Android還支持立體聲藍(lán)牙(A2Dphe和AVCRP),并有自動(dòng)配對(duì)功能。9、強(qiáng)大的GPS技術(shù)。Android內(nèi)部提供了大量的GPS組件,我們可以很輕松地獲得設(shè)備當(dāng)前的位置等信息,讓導(dǎo)航等功能更加完美。10、Android系統(tǒng)硬件檢測(cè)。Android可自動(dòng)檢測(cè)和修復(fù)SD卡的文件系統(tǒng),允許第三方應(yīng)用顯示Android系統(tǒng)的硬件特征。為了讓用戶(hù)下載到與自己的設(shè)備匹配的應(yīng)用,我們可以檢測(cè)用戶(hù)設(shè)備的硬件信息,讓滿(mǎn)足應(yīng)用要求的設(shè)備安裝該程序,當(dāng)更多的Android設(shè)備建立在不同的硬件上時(shí),這個(gè)功能顯得很實(shí)用.Android平臺(tái)與iPhone平臺(tái)的對(duì)比過(guò)去智能手機(jī)市場(chǎng)的領(lǐng)先者是WindowsMobile/SmartPhone和BlackBerry,同時(shí)Symbian和Palm也在其中角逐。但隨著iPhone橫空出世,就以簡(jiǎn)單易用,并功能強(qiáng)大,作為了智能手機(jī)的代名詞.近來(lái)android也以其開(kāi)源、免費(fèi)的特質(zhì)強(qiáng)勢(shì)來(lái)襲,下面就其孰優(yōu)孰劣進(jìn)行一下對(duì)比。開(kāi)發(fā)平臺(tái)的對(duì)比對(duì)于iPhone平臺(tái)的開(kāi)發(fā),首先要熟悉Apple的MACOS或者是Unix系統(tǒng)的開(kāi)發(fā)基礎(chǔ),iPhone的開(kāi)發(fā)工具Xcode并不支持Windows平臺(tái),因此開(kāi)發(fā)者首先要擁有一臺(tái)mac電腦;語(yǔ)言學(xué)習(xí)方面,熟悉C語(yǔ)言的工程師可以省一點(diǎn)力,因?yàn)樵贠bjective—C中,可以直接編寫(xiě)C程序,唯有用戶(hù)接口的部分,一定得仰賴(lài)Objective-C。Android采用java開(kāi)發(fā),因此Android對(duì)系統(tǒng)資源的操作程度已接近PC客戶(hù)端開(kāi)發(fā).程序兼容性問(wèn)題iPhone獨(dú)此一家,因此可以很好控制應(yīng)用兼容性問(wèn)題,而Android平臺(tái)的手機(jī)聯(lián)盟戰(zhàn)略,便有各家廠(chǎng)商的不同規(guī)格型號(hào)的機(jī)器,因而Google通過(guò)手機(jī)廠(chǎng)商統(tǒng)一硬件的規(guī)格手段達(dá)到兼容性的平衡.不過(guò),也確實(shí)有開(kāi)發(fā)者擔(dān)心Android的開(kāi)放平臺(tái),未來(lái)難保手機(jī)廠(chǎng)商不會(huì)因?yàn)樽陨淼男枨蠖兴{(diào)整,仍可能導(dǎo)致兼容性問(wèn)題發(fā)生。封閉和開(kāi)放的審核制度封閉和嚴(yán)格的審核一直都是iPhone做為Apple設(shè)計(jì)理念和保證app質(zhì)量的評(píng)審手段之一,在app應(yīng)用開(kāi)發(fā)完成,上架AppStore上前,Apple也必須審核軟件的內(nèi)容,以避免包含色情與暴力,或者有已知Bug的軟件,影響整個(gè)市集的質(zhì)量。由于iPhone軟件的銷(xiāo)售與安裝,只能透過(guò)AppStore這個(gè)唯一的管道,有志進(jìn)入IPhone市場(chǎng)的開(kāi)發(fā)者,也不得不買(mǎi)賬。相較于A(yíng)pple的封閉,Android就顯得開(kāi)放許多,AndroidMarket則是被動(dòng)審查機(jī)制(只有被足夠多的用戶(hù)舉報(bào),Google才會(huì)對(duì)此進(jìn)行審核),程序上傳幾個(gè)小時(shí)后,使用者就可以下載。事實(shí)上開(kāi)發(fā)者不經(jīng)由AndroidMarket,也有其他途徑營(yíng)銷(xiāo)。如:安卓市場(chǎng)。封閉與開(kāi)放的作法各有好處,由Apple把關(guān)且鎖定銷(xiāo)售管道的作法,對(duì)消費(fèi)者而言,可以確保質(zhì)量;而開(kāi)發(fā)者也省得比較各市集之間的優(yōu)劣。而Android的開(kāi)放作法,則有不設(shè)限的好處──開(kāi)發(fā)者不用擔(dān)心Apple因?yàn)樽陨砝娴目紤],而駁回軟件上架的申請(qǐng)。消費(fèi)者的選擇自由度也高出很多.UI交互上的差異在傳統(tǒng)手機(jī)時(shí)代,用戶(hù)直接用鍵盤(pán)、按鍵操作數(shù)據(jù)。iPhone的操作有別于之前傳統(tǒng)手機(jī)的體驗(yàn),iPhone大觸摸屏概念推出,用戶(hù)可以直接對(duì)內(nèi)容進(jìn)行操作排除其他中間設(shè)備控制,降低用戶(hù)使用門(mén)檻,對(duì)內(nèi)容操作也有很直接的體驗(yàn)。Android則保留傳統(tǒng)手機(jī)的一些特征(返回、搜索、home、menu實(shí)體按鍵),也同樣有大觸摸屏;兩者之間的硬件差異,因此也決定了交互視覺(jué)上本質(zhì)的差異;iPhone遵從Apple精簡(jiǎn)設(shè)計(jì)風(fēng)格,用隱喻的視覺(jué)方式提示用戶(hù)進(jìn)行使用操作,同樣也直觀(guān)表達(dá)下一步的操作流程。大部分操作直接和內(nèi)容交互完成,用戶(hù)體驗(yàn)統(tǒng)一連貫,典型案例:解鎖.Android有實(shí)體按鍵,承載其余過(guò)多的基本操作,將用戶(hù)停留在最重要的內(nèi)容上,因?yàn)橛懈嘤布僮?也能有更豐富的表現(xiàn),典型案例:軌跡球顏色提醒。缺點(diǎn):部分操作,屏幕與按鍵之間來(lái)回轉(zhuǎn)換。title和導(dǎo)航指引手持移動(dòng)設(shè)備的特性決定屏幕的有限,在應(yīng)用程序的層級(jí)關(guān)系中如何指引用戶(hù)完成操作,便尤為重要.iPhone:應(yīng)用程序有信息層級(jí)關(guān)系,iPhone利用title區(qū)域進(jìn)行操作指引,title的左邊是返回.讓用戶(hù)明確層級(jí)之間的關(guān)系。Android:頁(yè)面的回退依靠實(shí)體返回按鍵,因此title區(qū)域不必要操作,在視覺(jué)上減小了高度,擴(kuò)大了內(nèi)容區(qū)域。缺點(diǎn):沒(méi)有一個(gè)好的導(dǎo)航指引.Android平臺(tái)開(kāi)發(fā)過(guò)程研究Android移動(dòng)平臺(tái)作為21世紀(jì)的新秀,受到了越來(lái)越多的開(kāi)發(fā)者的追捧,在這股開(kāi)發(fā)的浪潮中,逐漸形成了一套具有Android特色的開(kāi)發(fā)流程。由于A(yíng)ndroid的優(yōu)越性,其開(kāi)發(fā)顯得非常的有規(guī)律性可尋。大致的開(kāi)發(fā)流程如下:1、需求分析。作為一個(gè)軟件,它必須有其存在的意義和價(jià)值。而這價(jià)值和意義就需要靠需求分析來(lái)確定.2、功能分析。作為一個(gè)手機(jī)軟件,它的任務(wù)就是給用戶(hù)使用的。如何提供最好的用戶(hù)體驗(yàn)就值得每一個(gè)程序員深思。這也是衡量一個(gè)程序成功與否的關(guān)鍵所在。3、界面設(shè)計(jì)。作為一個(gè)手機(jī)軟件,它只能在極有限的區(qū)域中顯示自己。如何在有限的空間里面更完美的展現(xiàn)出自己的獨(dú)特之處就顯得尤為重要了。4、系統(tǒng)開(kāi)發(fā)。作為一個(gè)軟件的主體部分,系統(tǒng)開(kāi)發(fā)的好壞直接決定了該系統(tǒng)的性能和壽命。5、測(cè)試.在任何一個(gè)軟件開(kāi)發(fā)行業(yè)中,無(wú)論是J2EE、J2SE、J2ME等等其他開(kāi)發(fā)中,測(cè)試時(shí)必不可少的一環(huán)。在A(yíng)ndroid開(kāi)發(fā)中,由于手機(jī)的高頻率使用,和硬件系統(tǒng)上的不足,使得對(duì)軟件的要求更加的嚴(yán)格,這就要求在開(kāi)發(fā)完成后,在對(duì)其進(jìn)行嚴(yán)格的測(cè)試。而測(cè)試又包括了單元測(cè)試、系統(tǒng)測(cè)試等等方面的測(cè)試。6、發(fā)布。在完成了一個(gè)系統(tǒng)的開(kāi)發(fā)后,就要將其發(fā)布,只有經(jīng)過(guò)廣大用戶(hù)的考驗(yàn),才算是一個(gè)合格的產(chǎn)品。在A(yíng)ndroid平臺(tái)中,Google提供了一套完整的發(fā)布機(jī)制—-Googlemarket。Android開(kāi)發(fā)環(huán)境的搭建下載需要用到的工具1、下載JAVA的IDE開(kāi)發(fā)工具–Eclipse到Eclipse官方網(wǎng)站下載EclipseForJavaEE的最新Windows版本下載頁(yè)面地址:http://www.eclips/downloads/,如圖2。1所示:圖2.1下載Eclipse2、下載Java開(kāi)發(fā)包—JavaSEDevelopmentKit(JDK)JDK6到Sun官方網(wǎng)站下載JDK6,選擇JDK6Updat(yī)e12下載頁(yè)面地址:http://java.s/javase/downloads/index.jsp,如圖2。2所示:圖2。2下載JDK3、下載Android開(kāi)發(fā)包—AndroidSDK到Google的官方網(wǎng)站下載ForWindows的Android的開(kāi)發(fā)包下載地址:http://dl。google.com/android/android-sdk_r11-windows下載完需要的工具之后,開(kāi)始安裝1、安裝Eclipse:下載回來(lái)的Eclipse(eclipse-jee(cuò)-ganymede-SR2-win32.zip)直接解壓即可2、安裝JDK6:運(yùn)行下載回來(lái)的JSK安裝包(jdk—6u25—windows—i586.exe),一路“下一步"即可3、安裝Android開(kāi)發(fā)包(SDK):下載回來(lái)的SDK包(android-sdk_r11—windows.zip)直接解壓即可讓Eclipse自動(dòng)安裝Android開(kāi)發(fā)插件(ADT-plugin)1、啟動(dòng)安裝完(解壓)后的Eclipse目錄下的Ecplise.exe2、點(diǎn)擊菜單“Help”—>“SoftwareUpdates”,在打開(kāi)的窗口中切換到選項(xiàng)頁(yè)“AvailableSoftware”3、首先點(diǎn)擊選項(xiàng)“Addsite…”,然后手動(dòng)輸入以下地址:http://dl-ssl.google.com/android/eclipse/,點(diǎn)擊“OK”4、剛才加入的地址,點(diǎn)擊“Install…”進(jìn)行ADT(AndroidDevelopmentTools)的安裝工作.5、Eclipse此時(shí)會(huì)從加入的地址中自動(dòng)下載跟安裝ADT,稍等一會(huì),安裝完畢后,提示需要重啟Eclipse,點(diǎn)擊“OK”重啟Eclipse。如圖2.3所示:配置AndroidSDK路徑重啟Eclipse后,點(diǎn)擊菜單“Window"—〉“Preference”,打開(kāi)配置窗口,在左邊選中Android,在右邊輸入AndroidSDK的路徑(剛才步驟下載的AndroidSDK解壓出來(lái)的目錄),點(diǎn)擊“OK”,如圖2.4所示:圖2。3安裝ADT圖2.4配置AndroidSDK路徑創(chuàng)建AVD為使android應(yīng)用程序可以在模擬器上運(yùn)行,必須創(chuàng)建AVD。在eclipse中選擇Windows〉A(chǔ)ndroidSDKandAVDManager,點(diǎn)擊左側(cè)面板的VirtualDevices,再右側(cè)點(diǎn)擊New。填入Name,選擇Target的API,SDCard大小任意(推薦256M),Skin隨便選,Hardware目錄保持默認(rèn)值。點(diǎn)擊CreateAVD即可完成創(chuàng)建AVD。本系統(tǒng)是在A(yíng)ndroidSDK2.1下完成的.自此Android開(kāi)發(fā)環(huán)境搭建完成。相關(guān)技術(shù)理論RSS技術(shù)簡(jiǎn)介信息傳播工具多種多樣,包括可以免費(fèi)收聽(tīng)的無(wú)線(xiàn)電廣播、公共和有線(xiàn)電視、印刷媒體,甚至包括Internet這樣顛覆性的技術(shù),以及其龐大的Web站點(diǎn)和電子郵件訂閱。雖然選擇很多,但是這些工具都存在一個(gè)問(wèn)題:很難在龐雜的海量數(shù)據(jù)中精確查找到真正感興趣的信息和價(jià)值。幸運(yùn)的是,RSS可以幫助我們解決這個(gè)問(wèn)題。RSS是“ReallySimpleSyndication”的縮寫(xiě)。RSS是一種內(nèi)容發(fā)布者用來(lái)發(fā)布信息的XML數(shù)據(jù)格式,這些信息經(jīng)過(guò)了分類(lèi)并適合人機(jī)閱讀。RSS提要通常使用諸如新聞閱讀器這種人類(lèi)可讀的友好格式進(jìn)行處理并顯示給用戶(hù),本教程中構(gòu)建的應(yīng)用程序就是這樣一種新聞閱讀器。RSS提要同樣可以供計(jì)算機(jī)使用,從而生成后續(xù)的、聚合的信息源。舉例來(lái)說(shuō),定期檢索并提供給旅行社本地預(yù)訂系統(tǒng)的租賃列表就是一個(gè)機(jī)器使用RSS提要的例子。在討論新聞內(nèi)容時(shí)經(jīng)常會(huì)提到RSS,然而,除新聞以外,這種格式可用于組織和發(fā)布其他很多類(lèi)型的信息。例如,很多Web站點(diǎn)都發(fā)布可用的pod—cast的RSS提要,從而發(fā)布音頻和視頻內(nèi)容。Handango.com是一個(gè)流行的移動(dòng)軟件和內(nèi)容的在線(xiàn)商店,它根據(jù)移動(dòng)平臺(tái)分類(lèi),提供新的流行軟件標(biāo)題的提要。例如,提供針對(duì)Windows?Mobile、Blackberry、Palm和其他平臺(tái)的提要。用不了多久,很可能就會(huì)提供針對(duì)Android應(yīng)用程序的提要了!RSS的格式是XML數(shù)據(jù),這表示數(shù)據(jù)本身就包含描述性元素,也就是說(shuō)它是自包含的.隨著行業(yè)的逐步規(guī)范化,XML結(jié)構(gòu)在過(guò)去幾年也經(jīng)歷了一些變化。最新的版本也是應(yīng)用最廣的版本是2.0。RSS2.0是一種相對(duì)簡(jiǎn)單的XML結(jié)構(gòu),很容易由計(jì)算機(jī)程序解析。RSS是站點(diǎn)用來(lái)和其他站點(diǎn)之間共享內(nèi)容的一種簡(jiǎn)易方式(也叫聚合內(nèi)容),通常被用于新聞和其他按順序排列的網(wǎng)站,例如Blog。一段項(xiàng)目的介紹可能包含新聞的全部介紹,Blogpost等等?;蛘邇H僅是額外的內(nèi)容或者簡(jiǎn)短的介紹。這些項(xiàng)目的鏈接通常都能鏈接到全部的內(nèi)容。網(wǎng)絡(luò)用戶(hù)可以在客戶(hù)端借助于支持RSS的新聞聚合工具軟件(例如NewzCrawler、FeedDemon),在不打開(kāi)網(wǎng)站內(nèi)容頁(yè)面的情況下閱讀支持RSS輸出的網(wǎng)站內(nèi)容。網(wǎng)站提供RSS輸出,有利于讓用戶(hù)發(fā)現(xiàn)網(wǎng)站內(nèi)容的更新.RSS的優(yōu)點(diǎn)。如果沒(méi)有RSS,用戶(hù)就不得不每日都來(lái)您的網(wǎng)站檢查新的內(nèi)容。對(duì)許多用戶(hù)來(lái)說(shuō)這樣太費(fèi)時(shí)了。通過(guò)RSSfee(cuò)d(RSS通常被稱(chēng)為Newsfeed或RSSfeed),用戶(hù)們可以使用RSS聚合器來(lái)更快地檢查您的網(wǎng)站更新(RSS聚合器是用來(lái)聚集并分類(lèi)RSSfeed的網(wǎng)站或軟件)。由于RSS數(shù)據(jù)很小巧并可快速加載,它可輕易地被類(lèi)似移動(dòng)電話(huà)或PDA的服務(wù)使用。擁有相似內(nèi)容的網(wǎng)站環(huán)(Web-rings)可以輕易地在它們的網(wǎng)站共享內(nèi)容,使這些網(wǎng)站更出色更有價(jià)值。Pull解析算法研究構(gòu)建RSS閱讀器應(yīng)用程序的核心操作就是獲取并處理XML數(shù)據(jù).當(dāng)前GoogleAndroid處理讀?。豈L數(shù)據(jù)有三種主流方式:DOM解析、Pull解析、SAX解析。下面來(lái)對(duì)這三種解析方法來(lái)進(jìn)行比較:DOM解析XML文件時(shí),會(huì)將XML文件的所有內(nèi)容讀取到內(nèi)存中,然后允許您使用DOMAPI遍歷XML樹(shù)、檢索所需的數(shù)據(jù)。使用DOM操作XML的代碼看起來(lái)比較直觀(guān),并且,在某些方面比基于SAX的實(shí)現(xiàn)更加簡(jiǎn)單。但是,因?yàn)镈OM需要將XML文件的所有內(nèi)容讀取到內(nèi)存中,所以?xún)?nèi)存的消耗比較大,特別是對(duì)于運(yùn)行Android的移動(dòng)設(shè)備來(lái)說(shuō),因?yàn)樵O(shè)備的資源比較寶貴,所以建議還是采用SAX或者PULL來(lái)解析XML文件,當(dāng)然,如果XML文件的內(nèi)容比較小的時(shí)候采用DOM是可行的。SAX是一個(gè)解析速度快并且占用內(nèi)存少的xml解析器,非常適合用于A(yíng)ndroid等移動(dòng)設(shè)備.SAX解析XML文件采用的是事件驅(qū)動(dòng),也就是說(shuō),它并不需要解析完整個(gè)文檔,在按內(nèi)容順序解析文檔的過(guò)程中,SAX會(huì)判斷當(dāng)前讀到的字符是否合法XML語(yǔ)法中的某部分,如果符合就會(huì)觸發(fā)事件。所謂事件,其實(shí)就是一些回調(diào)(callback)方法,這些方法(事件)定義在ContentHandler接口.如果在一個(gè)XML文檔中我們只需要前面一部分?jǐn)?shù)據(jù),若使用SAX方式或DOM方式會(huì)對(duì)整個(gè)文檔進(jìn)行解析,盡管XML文檔中后面的大部分?jǐn)?shù)據(jù)我們其實(shí)都不需要解析,因此這樣實(shí)際上就浪費(fèi)了處理資源。因此使用PULL方式比較合適。Pull解析器和SAX解析器雖有區(qū)別但也有相似性。他們的區(qū)別為:SAX解析器的工作方式是自動(dòng)將事件推入注冊(cè)的事件處理器進(jìn)行處理,因此你不能控制事件的處理主動(dòng)結(jié)束;而Pull解析器的工作方式為允許你的應(yīng)用程序代碼主動(dòng)從解析器中獲取事件,正因?yàn)槭侵鲃?dòng)獲取事件,因此可以在滿(mǎn)足了需要的條件后不再獲取事件,結(jié)束解析.這是他們主要的區(qū)別。而他們的相似性在運(yùn)行方式上,Pull解析器也提供了類(lèi)似SAX的事件,開(kāi)始文檔START_DOCUMENT和結(jié)束文檔END_DOCUMENT,開(kāi)始元素START_TAG和結(jié)束元素END_TAG,遇到元素內(nèi)容TEXT等,但需要調(diào)用next()方法提取它們(主動(dòng)提取事件)。Android系統(tǒng)中和Pull方式相關(guān)的包為org。xmlpull.v1,在這個(gè)包中提供了Pull解析器的工廠(chǎng)類(lèi)XmlPullParserFactory和Pull解析器XmlPullParser,XmlPullParserFactory實(shí)例調(diào)用newPullParser方法創(chuàng)建XmlPullParser解析器實(shí)例,接著XmlPullParser實(shí)例就可以調(diào)用getEventType()和next()等方法依次主動(dòng)提取事件,并根據(jù)提取的事件類(lèi)型進(jìn)行相應(yīng)的邏輯處理.另外Pull方式比較簡(jiǎn)單,而且可以根據(jù)判斷停止解析(DOM和SAX都需要對(duì)文件的文章解析中途不能停止)。綜合考慮,本系統(tǒng)的實(shí)現(xiàn)用到的是Pull解析算法來(lái)解析數(shù)據(jù)源。Android平臺(tái)下RSS閱讀器的詳細(xì)分析設(shè)計(jì)與實(shí)現(xiàn)問(wèn)題的提出需求分析1、系統(tǒng)開(kāi)發(fā)背景.在信息高速發(fā)展的今天,人們對(duì)信息非常的重視,希望能夠隨時(shí)隨地的獲取即時(shí)更新的信息。而新聞閱讀器剛好可以滿(mǎn)足人們的要求。在傳統(tǒng)的平臺(tái)例如IPhone,有許多類(lèi)似的程序,都受到了用戶(hù)的好歡迎。通過(guò)武漢某公司在Googleandroidmarket上面的程序的調(diào)查,發(fā)現(xiàn)關(guān)于信息方面的程序普遍受到廣大用戶(hù)的歡迎。因此本系統(tǒng)將能滿(mǎn)足人們對(duì)信息的需求。2、系統(tǒng)功能的描述1)頻道的切換:用戶(hù)能按照自己的需求來(lái)切換自己所需要的頻道。2)新聞的閱讀:當(dāng)用戶(hù)打開(kāi)一個(gè)新聞的時(shí)候,用戶(hù)能準(zhǔn)確無(wú)誤并且方便的讀取到新聞的內(nèi)容。3)新聞的收藏:當(dāng)用戶(hù)覺(jué)得某一個(gè)新聞?dòng)腥さ臅r(shí)候,用戶(hù)能將其添加到自己所喜歡的新聞列表中。4)新聞的更新:當(dāng)RSS更新以后,程序能做相應(yīng)的更新,能與網(wǎng)絡(luò)上的內(nèi)容保持一致性。做到即時(shí)更新。系統(tǒng)功能結(jié)構(gòu)根據(jù)系統(tǒng)需求描敘和系統(tǒng)數(shù)據(jù)流圖,得出系統(tǒng)功能結(jié)構(gòu)如圖4。1所示:RSS閱讀器新聞

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論