android第六章.ppt_第1頁
android第六章.ppt_第2頁
android第六章.ppt_第3頁
android第六章.ppt_第4頁
android第六章.ppt_第5頁
已閱讀5頁,還剩24頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、Android程序開發(fā)應(yīng)用實(shí)例第六講 Android Service組件,2,內(nèi)容概要,3,本節(jié)內(nèi)容,什么是Android,Service作用,Android Service,Service用于創(chuàng)建Android的后臺(tái)服務(wù),功能類似于Linux系統(tǒng)中的守護(hù)進(jìn)程,能夠?yàn)橛脩籼峁╅L(zhǎng)時(shí)間運(yùn)行的后臺(tái)程序。 Service可能從系統(tǒng)啟動(dòng)時(shí)一直持續(xù)到系統(tǒng)關(guān)閉時(shí)才結(jié)束。 例如接受短信或者電話的服務(wù),雖然用戶沒有顯示啟動(dòng)短信或者電話接收的服務(wù),但開機(jī)時(shí)短信或者電話服務(wù)就一直運(yùn)行直到用戶關(guān)機(jī)。,Service與Activity比較,與Activity不同,Activity的程序能夠與用戶進(jìn)行交互并會(huì)獲取當(dāng)前系統(tǒng)

2、的控制權(quán) 例如電話撥號(hào)的Activity,該程序需要用戶輸入號(hào)碼,并判斷用戶輸入號(hào)碼的有效性。 Service與Activity完全相反,Service一般不與用戶進(jìn)行運(yùn)行時(shí)的交互,并且Service運(yùn)行時(shí),不會(huì)改變當(dāng)前應(yīng)用程序的控制權(quán)。,Service運(yùn)行方式,Service可以根據(jù)應(yīng)用的需要決定其運(yùn)行方式,Service包含兩種運(yùn)行方式 一種方式運(yùn)行在它自己的進(jìn)程中 另外一種方式運(yùn)行在其他應(yīng)用程序進(jìn)程的上下文(context)里面。 Note: 對(duì)于第二種方式,其它的組件可以通過bindService方法捆綁指定的服務(wù),然后通過遠(yuǎn)程過程調(diào)用(RPC)來調(diào)用這個(gè)服務(wù)。,Service特點(diǎn),可

3、總結(jié)出Service具有以下特點(diǎn): 可以沒有用戶界面,不需要與用戶交互。 可以長(zhǎng)期運(yùn)行,并且不占程序控制權(quán)(焦點(diǎn)) 比Activity 的優(yōu)先級(jí)高,不會(huì)輕易被Android系統(tǒng)終止,即使Service被系統(tǒng)終止,在系統(tǒng)資源恢復(fù)后Service也將自動(dòng)恢復(fù)成運(yùn)行狀態(tài)。 用于進(jìn)程間通信(Inter Process Communication, IPC),解決兩個(gè)不同Android應(yīng)用程序進(jìn)程之間的調(diào)用和通訊問題。,8,本節(jié)內(nèi)容,什么是Android,解析Service的實(shí)現(xiàn),創(chuàng)建Service,創(chuàng)建Service時(shí),必須使用extends關(guān)鍵字繼承Android提供的android.app.Ser

4、vice類 并且覆蓋Service類提供的onCreate、onStart以及onDestroy等方法。 onCreate方法在Service被創(chuàng)建時(shí)被調(diào)用。 onStart方法在Service啟動(dòng)時(shí)被調(diào)用。 onDestroy方法在Service終止時(shí)調(diào)用。,啟動(dòng)Service,創(chuàng)建好Service類之后,可通過兩種方式啟動(dòng)Service 啟動(dòng)方式是最常用的啟動(dòng)Service的方式,這種方式通過調(diào)用Context.startService()來啟動(dòng)Service。 捆綁方式先使用通過Context.bindService()來建立同指定Service的服務(wù)鏈接(Connection),然后通

5、過這個(gè)服務(wù)鏈接來啟動(dòng)Service的對(duì)象。,實(shí)例-創(chuàng)建后臺(tái)服務(wù)Service,public class MyService extends Service /*繼承Service類的方法*/ public IBinder onBind(Intent intent) return binder; public void onCreate() super.onCreate(); public void onStart() super.onStart(); public void onDestroy() super.onDestroy(); ,綁定一個(gè)已經(jīng)存在的Service,綁定一個(gè)已經(jīng)存在的Se

6、rvice是通過bindService方法實(shí)現(xiàn)的,這個(gè)方法的原型是: bindService(Intent inent ,ServiceConnection serviceConnection,int flags) 第一個(gè)參數(shù)是一個(gè)Intent對(duì)象,這個(gè)對(duì)象指定了需要綁定的Service 第二參數(shù)(serviceConnection)用于監(jiān)測(cè)Service與訪問者之間的連接情況 第三個(gè)參數(shù)指定被綁定的service的創(chuàng)建方式,例如當(dāng)這個(gè)參數(shù)為Context.BIND_AUTO_CREATE時(shí),則在綁定時(shí)自動(dòng)創(chuàng)建service 與Windows Mobile、iPhone、Blackberry都

7、會(huì)與Android的競(jìng)爭(zhēng)。,綁定Service的步驟,生成ServiceConnection對(duì)象,并且重寫ServiceConnection的onServiceConnected方法和onServiceDisconnected方法 創(chuàng)建被綁定的Service的Intent對(duì)象 將步驟1和步驟2創(chuàng)建的對(duì)象作為形參傳遞給bindService方法,執(zhí)行bindService方法來綁定Service。 若綁定Service成功,則onServiceConnected的方法會(huì)被執(zhí)行;否則onServiceDisconnected會(huì)被執(zhí)行。,14,本節(jié)內(nèi)容,什么是Android,Service生命周期,

8、啟動(dòng)方式的Service生命周期,開始于Context.startService() 結(jié)束于Context.stopService(),綁定方式的Service生命周期,開始于Context.bindService() 結(jié)束于Context.unbindservice(),17,本節(jié)內(nèi)容,什么是Android,遠(yuǎn)程Service調(diào)用,AIDL,遠(yuǎn)程Service調(diào)用就是應(yīng)用程序之間的Service調(diào)用,需要使用Android提供AIDL(Android Interface Definition Language)來實(shí)現(xiàn)。 AIDL (Android Interface Definition L

9、anguage)是一種IDL 語言,用于生成可以在Android設(shè)備上兩個(gè)進(jìn)程之間進(jìn)行進(jìn)程間通信(IPC)的代碼。 AIDL IPC機(jī)制是面向接口的,像COM或Corba一樣,但是更加輕量級(jí)。,使用AIDL實(shí)現(xiàn)Service的遠(yuǎn)程調(diào)用的步驟,創(chuàng)建后綴名為aidl的AIDL文件 實(shí)現(xiàn)AIDL接口方法,編譯器會(huì)根據(jù)AIDL接口產(chǎn)生一個(gè)Java接口,并且實(shí)現(xiàn)一些必要的附加方法供遠(yuǎn)程調(diào)用 這個(gè)接口有一個(gè)名為Stub的內(nèi)部抽象類,必須創(chuàng)建一個(gè)類來擴(kuò)展這個(gè)Stub內(nèi)部抽象類 向客戶端開放接口,創(chuàng)建AIDL文件,AIDL的文件名后綴必須為aidl,定義一個(gè)AIDL文件的語法和定義一個(gè)Java接口的語法基本一

10、致。 在AIDL文件中可以聲明任意多個(gè)方法,方法可以帶參數(shù)也可以有返回值,參數(shù)和返回值可以是任意類型。,創(chuàng)建AIDL文件例子,下面是一個(gè)aidl文件(IStudent.aidl)的例子,該aidl文件中聲明了兩個(gè)方法setStudentID和getStudentID。 package com.sch.Ex_6_3_AIDL; interface IStudent void setStudentID(int StudentID); int getStudentID(); 如果創(chuàng)建aidl文件有效,則系統(tǒng)會(huì)自動(dòng)為該文件在gen目錄下生成同名的java接口代碼。,創(chuàng)建AIDL文件規(guī)范,規(guī)范: AID

11、L文件必須以.aidl作為后綴名. AIDL接口中用到的數(shù)據(jù)類型, 除了內(nèi)建類型(基本類型, String, List, Map, CharSequence), 其他類型都需要導(dǎo)入相應(yīng)的包。 接口名需要和文件名相同。 方法的參數(shù)或返回值是自定義類型時(shí), 該自定義的類型必須實(shí)現(xiàn)了Parcelable接口. 所有非java基本類型參數(shù)都需要加上in, out, inout標(biāo)記, 以表明參數(shù)是輸入?yún)?shù), 輸出參數(shù), 還是輸入輸出參數(shù)。 接口和方法前不能使用訪問修飾符和static, final等修飾。,實(shí)現(xiàn)AIDL文件生成的Java接口,AIDL會(huì)生成一個(gè)和.aidl文件名同名的Java接口文件,該

12、接口中有一個(gè)靜態(tài)抽象內(nèi)部類Stub。 Stub類中聲明了AIDL文件中定義的所有方法。 定義一個(gè)類來實(shí)現(xiàn)AIDL定義的接口,并且繼承遠(yuǎn)程Service的抽象類Stub public class MyServiceImpl extends IStudent.Stub /繼承IStudent.Stub private int StudentID; public int getStudentID() return StudentID; ,客戶端調(diào)用,定義一個(gè)Activity來綁定遠(yuǎn)程Service,通過IStudent.Stub.asInterface方法獲得IStudent接口實(shí)例。 然后,直接通過該實(shí)例來調(diào)用Istudent中定義的接口,這就像使用本地的方法一樣。,25,本節(jié)內(nèi)容,什么是Android,系統(tǒng)服務(wù),系統(tǒng)服務(wù),除了自定義Service之外,Android提供了底層的系統(tǒng)服務(wù)供程序開發(fā)人員使用,這些系統(tǒng)服務(wù)覆蓋了Android系統(tǒng)中關(guān)鍵的應(yīng)用例如網(wǎng)絡(luò)、系統(tǒng)搜索、電話等。 例如: WINDOW_SERVICE 管理打開的窗口,例如獲得屏幕的寬和高 ACTIVITY_SERVICE

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論