AndroidService的生命周期2-創(chuàng)新互聯(lián)

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

員工經(jīng)過(guò)長(zhǎng)期磨合與沉淀,具備了協(xié)作精神,得以通過(guò)團(tuán)隊(duì)的力量開發(fā)出優(yōu)質(zhì)的產(chǎn)品。創(chuàng)新互聯(lián)建站堅(jiān)持“專注、創(chuàng)新、易用”的產(chǎn)品理念,因?yàn)椤皩W⑺詫I(yè)、創(chuàng)新互聯(lián)網(wǎng)站所以易用所以簡(jiǎn)單”。公司專注于為企業(yè)提供成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)、微信公眾號(hào)開發(fā)、電商網(wǎng)站開發(fā),小程序制作,軟件定制開發(fā)等一站式互聯(lián)網(wǎng)企業(yè)服務(wù)。

      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 通信并且讓它持續(xù)運(yùn)行

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

提高 Service 優(yōu)先級(jí)

     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)覺得當(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生命周

Android Service生命周期與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將終結(jié)這個(gè)服務(wù)。與很多Activity時(shí)的情況一樣,當(dāng)內(nèi)存很低的時(shí)候Android也可能會(huì)終結(jié)一個(gè)服務(wù)。如果這種情況發(fā)生,Android也可能在內(nèi)存夠用的時(shí)候嘗試啟動(dòng)被終止的服務(wù),所以你的服務(wù)必須為重啟持久保存信息,并且最好在onStart方法內(nèi)來(lái)做。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

名稱欄目:AndroidService的生命周期2-創(chuàng)新互聯(lián)
網(wǎng)頁(yè)地址:http://bm7419.com/article26/ipdcg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google、面包屑導(dǎo)航搜索引擎優(yōu)化、網(wǎng)站設(shè)計(jì)公司、網(wǎng)站內(nèi)鏈企業(yè)網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站