資源描述:
《android-service詳解(實(shí)用)》由會(huì)員上傳分享,免費(fèi)在線(xiàn)閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。
1、Android開(kāi)發(fā)四大組件---Service詳解 service可以在和多場(chǎng)合的應(yīng)用中使用,比如播放多媒體的時(shí)候用戶(hù)啟動(dòng)了其他Activity這個(gè)時(shí)候程序要在后臺(tái)繼續(xù)播放,比如檢測(cè)SD卡上文件的變化,再或者在后臺(tái)記錄你地理信息位置的改變等等,總之服務(wù)嘛,總是藏在后頭的。 Service是在一段不定的時(shí)間運(yùn)行在后臺(tái),不和用戶(hù)交互應(yīng)用組件。每個(gè)Service必須在manifest中通過(guò)來(lái)聲明。可以通過(guò)contect.startservice和contect.bindserverice來(lái)啟動(dòng)。 Service和其他的應(yīng)用組件一樣,
2、運(yùn)行在進(jìn)程的主線(xiàn)程中。這就是說(shuō)如果service需要很多耗時(shí)或者阻塞的操作,需要在其子線(xiàn)程中實(shí)現(xiàn)。 service的兩種模式(startService()/bindService()不是完全分離的): 本地服務(wù)LocalService用于應(yīng)用程序內(nèi)部?! ∷梢詥?dòng)并運(yùn)行,直至有人停止了它或它自己停止。在這種方式下,它以調(diào)用Context.startService()啟動(dòng),而以調(diào)用Context.stopService()結(jié)束。它可以調(diào)用Service.stopSelf()或Service.stopSelfResult()來(lái)自己停止。不論調(diào)用了多
3、少次startService()方法,你只需要調(diào)用一次stopService()來(lái)停止服務(wù)?! ∮糜趯?shí)現(xiàn)應(yīng)用程序自己的一些耗時(shí)任務(wù),比如查詢(xún)升級(jí)信息,并不占用應(yīng)用程序比如Activity所屬線(xiàn)程,而是單開(kāi)線(xiàn)程后臺(tái)執(zhí)行,這樣用戶(hù)體驗(yàn)比較好。 遠(yuǎn)程服務(wù)RemoteService用于android系統(tǒng)內(nèi)部的應(yīng)用程序之間。 它可以通過(guò)自己定義并暴露出來(lái)的接口進(jìn)行程序操作??蛻?hù)端建立一個(gè)到服務(wù)對(duì)象的連接,并通過(guò)那個(gè)連接來(lái)調(diào)用服務(wù)。連接以調(diào)用Context.bindService()方法建立,以調(diào)用Context.unbindService()關(guān)閉。多個(gè)客戶(hù)
4、端可以綁定至同一個(gè)服務(wù)。如果服務(wù)此時(shí)還沒(méi)有加載,bindService()會(huì)先加載它。 可被其他應(yīng)用程序復(fù)用,比如天氣預(yù)報(bào)服務(wù),其他應(yīng)用程序不需要再寫(xiě)這樣的服務(wù),調(diào)用已有的即可?! ∩芷凇 ∈褂胏ontext.startService()啟動(dòng)Service是會(huì)會(huì)經(jīng)歷: context.startService()->onCreate()->onStart()->Servicerunning context.stopService()
5、->onDestroy()->Servicestop 如果Service還沒(méi)有運(yùn)行,則android先調(diào)用
6、onCreate()然后調(diào)用onStart();如果Service已經(jīng)運(yùn)行,則只調(diào)用onStart(),所以一個(gè)Service的onStart方法可能會(huì)重復(fù)調(diào)用多次。 stopService的時(shí)候直接onDestroy,如果是調(diào)用者自己直接退出而沒(méi)有調(diào)用stopService的話(huà),Service會(huì)一直在后臺(tái)運(yùn)行。該Service的調(diào)用者再啟動(dòng)起來(lái)后可以通過(guò)stopService關(guān)閉Service?! ∷哉{(diào)用startService的生命周期為:onCreate-->onStart(可多次調(diào)用)-->onDestroy 使用使用context.b
7、indService()啟動(dòng)Service會(huì)經(jīng)歷: context.bindService()->onCreate()->onBind()->Servicerunning onUnbind()->onDestroy()->Servicestop onBind將返回給客戶(hù)端一個(gè)IBind接口實(shí)例,IBind允許客戶(hù)端回調(diào)服務(wù)的方法,比如得到Service運(yùn)行的狀態(tài)或其他操作。這個(gè)時(shí)候把調(diào)用者(Context,例如Activity)會(huì)和Service綁定在一起,Context退出了,Srevice就會(huì)調(diào)用onUnbind->onDestroy相應(yīng)退
8、出。 所以調(diào)用bindService的生命周期為:onCreate-->onBind(只一次,不可多次綁定)-->onUnbind-->onDestory?! ≡赟ervice每一次的開(kāi)啟關(guān)閉過(guò)程中,只有onStart可被多次調(diào)用(通過(guò)多次startService調(diào)用),其他onCreate,onBind,onUnbind,onDestory在一個(gè)生命周期中只能被調(diào)用一次?! 《鴨?dòng)service,根據(jù)onStartCommand的返回值不同,有兩個(gè)附加的模式: 1.START_STICKY用于顯示啟動(dòng)和停止service。 2.START_N
9、OT_STICKY或START_REDELIVER_INTENT用于有命令需要處理時(shí)才運(yùn)行的模式?! 》?wù)不