【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】Android Service的生命周期2_第1頁(yè)
【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】Android Service的生命周期2_第2頁(yè)
【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】Android Service的生命周期2_第3頁(yè)
全文預(yù)覽已結(jié)束

下載本文檔

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

文檔簡(jiǎn)介

【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】AndroidService的生命周期2

有了Service類我們?nèi)绾螁?dòng)他呢,有兩種方法:

Context.startService()

Context.bindService()

1.

在同一個(gè)應(yīng)用任何地方調(diào)用startService()方法就能啟動(dòng)Service了,然后系統(tǒng)會(huì)回調(diào)Service類的onCreate()以及onStart()方法。這樣啟動(dòng)的Service會(huì)一直運(yùn)行在后臺(tái),直到Context.stopService()或者selfStop()方法被調(diào)用。另外如果一個(gè)Service已經(jīng)被啟動(dòng),其他代碼再試圖調(diào)用startService()方法,是不會(huì)執(zhí)行onCreate()的,但會(huì)重新執(zhí)行一次onStart()。

2.另外一種bindService()方法的意思是,把這個(gè)Service和調(diào)用Service的客戶類綁起來(lái),如果調(diào)用這個(gè)客戶類被銷毀,Service也會(huì)被銷毀。用這個(gè)方法的一個(gè)好處是,bindService()方法執(zhí)行后Service會(huì)回調(diào)上邊提到的onBind()方發(fā),你可以從這里返回一個(gè)實(shí)現(xiàn)了IBind接口的類,在客戶端操作這個(gè)類就能和這個(gè)服務(wù)通信了,比如得到Service運(yùn)行的狀態(tài)或其他操作。如果Service還沒(méi)有運(yùn)行,使用這個(gè)方法啟動(dòng)Service就會(huì)onCreate()方法而不會(huì)調(diào)用onStart()。

總結(jié):

1.startService()的目的是回調(diào)onStart()方法,onCreate()方法是在Service不存在的時(shí)候調(diào)用的,如果Service存在(例如之前調(diào)用了bindService,那么Service的onCreate方法已經(jīng)調(diào)用了)那么startService()將跳過(guò)onCreate()方法。

2.

bindService()目的是回調(diào)onBind()方法,它的作用是在Service和調(diào)用者之間建立一個(gè)橋梁,并不負(fù)責(zé)更多的工作(例如一個(gè)Service需要連接服務(wù)器的操作),一般使用bindService來(lái)綁定到一個(gè)現(xiàn)有的Service(即通過(guò)StartService啟動(dòng)的服務(wù))。

由于Service的onStart()方法只有在startService()啟動(dòng)Service的情況下才調(diào)用,故使用onStart()的時(shí)候要注意這點(diǎn)。

如果我們想保持和Service的通信,又不想讓Service隨著Activity退出而退出呢?你可以先startService()然后再bindService()。當(dāng)你不需要綁定的時(shí)候就執(zhí)行unbindService()方法,執(zhí)行這個(gè)方法只會(huì)觸發(fā)Service的onUnbind()而不會(huì)把這個(gè)Service銷毀。這樣就可以既保持和Service的通信,也不會(huì)隨著Activity銷毀而銷毀了。

Android系統(tǒng)對(duì)于內(nèi)存管理有自己的一套方法,為了保障系統(tǒng)有序穩(wěn)定的運(yùn)信,系統(tǒng)內(nèi)部會(huì)自動(dòng)分配,控制程序的內(nèi)存使用。當(dāng)系統(tǒng)覺(jué)得當(dāng)前的資源非常有限的時(shí)候,為了保證一些優(yōu)先級(jí)高的程序能運(yùn)行,就會(huì)殺掉一些他認(rèn)為不重要的程序或者服務(wù)來(lái)釋放內(nèi)存。這樣就能保證真正對(duì)用戶有用的程序仍然再運(yùn)行。如果你的Service碰上了這種情況,多半會(huì)先被殺掉。但如果你增加Service的優(yōu)先級(jí)就能讓他多留一會(huì),我們可以用setForeground(true)來(lái)設(shè)置Service的優(yōu)先級(jí)。

為什么是foreground?默認(rèn)啟動(dòng)的Service是被標(biāo)記為background,當(dāng)前運(yùn)行的Activity一般被標(biāo)記為foreground,也就是說(shuō)你給Service設(shè)置了foreground那么他就和正在運(yùn)行的Activity類似優(yōu)先級(jí)得到了一定的提高。當(dāng)讓這并不能保證你得Service永遠(yuǎn)不被殺掉,只是提高了他的優(yōu)先級(jí)。

摘自網(wǎng)絡(luò)其他資料:關(guān)于Service生命周AndroidService生命周期與Activity生命周期是相似的,但是也存在一些細(xì)節(jié)上也存在著重要的不同:onCreate和onStart是不同的通過(guò)從客戶端調(diào)用Context.startService(Intent)方法我們可以啟動(dòng)一個(gè)服務(wù)。如果這個(gè)服務(wù)還沒(méi)有運(yùn)行,Android將啟動(dòng)它并且在onCreate方法之后調(diào)用它的onStart方法。如果這個(gè)服務(wù)已經(jīng)在運(yùn)行,那么它的onStart方法將被新的Intent再次調(diào)用。所以對(duì)于單個(gè)運(yùn)行的Service它的onStart方法被反復(fù)調(diào)用是完全可能的并且是很正常的。onResume、onPause以及onStop是不需要的回調(diào)一個(gè)服務(wù)通常是沒(méi)有用戶界面的,所以我們也就不需要onPause、onResume或者onStop方法了。無(wú)論何時(shí)一個(gè)運(yùn)行中的Service它總是在后臺(tái)運(yùn)行。onBind如果一個(gè)客戶端需要持久的連接到一個(gè)服務(wù),那么他可以調(diào)用Context.bindService方法。如果這個(gè)服務(wù)沒(méi)有運(yùn)行方法將通過(guò)調(diào)用onCreate方法去創(chuàng)建這個(gè)服務(wù)但并不調(diào)用onStart方法來(lái)啟動(dòng)它。相反,onBind方法將被客戶端的Intent調(diào)用,并且它返回一個(gè)IBind對(duì)象以便客戶端稍后可以調(diào)用這個(gè)服務(wù)。同一服務(wù)被客戶端同時(shí)啟動(dòng)和綁定是很正常的。onDestroy與Activity一樣,當(dāng)一個(gè)服務(wù)被結(jié)束是onDestroy方法將會(huì)被調(diào)用。當(dāng)沒(méi)有客戶端啟動(dòng)或綁定到一個(gè)服務(wù)時(shí)Android將

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論