Android中Service有什么生命周期

本篇內(nèi)容主要講解“Android中Service有什么生命周期”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“Android中Service有什么生命周期”吧!

成都創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供方山網(wǎng)站建設(shè)、方山做網(wǎng)站、方山網(wǎng)站設(shè)計、方山網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計與制作、方山企業(yè)網(wǎng)站模板建站服務(wù),10多年方山做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務(wù)。

Android Service 生命周期可以促使移動設(shè)備的創(chuàng)新,讓用戶體驗(yàn)到***越的移動服務(wù),只有broadcast receivers執(zhí)行此方法的時候才是激活的,當(dāng) onReceive()返回的時候,它就是非激活狀態(tài)。

如果沒有程序停止它或者它自己停止,service將一直運(yùn)行。在這種模式下,service開始于調(diào)用Context.startService() ,停止于Context.stopService(). service可以通過調(diào)用Android Service 生命周期() 或 Service.stopSelfResult()停止自己。不管調(diào)用多少次startService() ,只需要調(diào)用一次 stopService() 就可以停止service。

可以通過接口被外部程序調(diào)用。外部程序建立到service的連接,通過連接來操作service。建立連接調(diào)開始于Context.bindService(), 結(jié)束于Context.unbindService(). 多個客戶端可以綁定到同一個service,如果service沒有啟動, bindService() 可以選擇啟動它。

這2種模式不是完全分離的。你可以可以綁定到一個通過startService()啟動的服務(wù)。如一個intent想要播放音樂,通過startService() 方法啟動后臺播放音樂的service。然后,也許用戶想要操作播放器或者獲取當(dāng)前正在播放的樂曲的信息,一個activity就會通過bindService()建立一個到此service的連接. 這種情況下 stopService() 在全部的連接關(guān)閉后才會真正停止service。

像activity一樣, service也有可以通過監(jiān)視狀態(tài)實(shí)現(xiàn)的生命周期。但是比activity要少――只有3個――而且是public的而不是protected的

void onCreate()   void onStart(Intent intent)   void onDestroy()

通過實(shí)現(xiàn)這3個方法,可以監(jiān)視service生命周期的2個嵌套循環(huán):

整個生命周期 從onCreate() 開始,從onDestroy() 結(jié)束,像activity一樣, a Android Service 生命周期在 onCreate()中執(zhí)行初始化操作,在 onDestroy()中釋放所有用到的資源。如:后臺播放音樂的service可能在 onCreate()創(chuàng)建一個播放音樂的線程,在onDestroy()中銷毀這個線程。

活動生命周期 開始于 onStart(). 這個方法處理傳入到startService()方法的intent。 音樂服務(wù)會打開intent查看要播放哪首歌曲,并開始播放。當(dāng)服務(wù)停止的時候,沒有方法檢測到――沒有 onStop() 方法,onCreate() 和 onDestroy() 用于所有通過Context.startService() or Context.bindService() 啟動的service。onStart() 只用于通過startService()開始的service。

如果一個Android Service 生命周期是可以從外部綁定的,它就可以觸發(fā)以下的方法:

IBinder onBind(Intent intent)   boolean onUnbind(Intent intent)   void onRebind(Intent intent)

onBind() 回調(diào)被傳遞給調(diào)用bindService 的intent, onUnbind() 被unbindService()中的intent處理。如果服務(wù)允許被綁定。那么onBind() 方法返回客戶端和sercie的溝通通道。如果一個新的客戶端連接到服務(wù),onUnbind() 會觸發(fā)onRebind() 調(diào)用。

下面的圖表說明了sercice的回調(diào)方法。下面的圖片將通過 startService 和通過bindService()啟動的service分開了,但是要注意不管他們怎么啟動的,都有可能被客戶端連接,因此都有可能觸發(fā)到onBind() 和 onUnbind() 方法。

當(dāng)經(jīng)過receiver 請求,broadcast message到達(dá)的時候, Android 調(diào)用持有message的intent的 onReceive() 方法,只有broadcast receivers執(zhí)行此方法的時候才是激活的,當(dāng) onReceive()返回的時候,它就是非激活狀態(tài)

一個含有激活的broadcast receiver的進(jìn)程是不會被中止的。但是只含有非激活組件的進(jìn)程在它占用的內(nèi)存被其他程序請求的時候,任何時間都可以被中止。 當(dāng)響應(yīng)broadcast message的程序因?yàn)橄暮芏鄷r間而在另外一個線程 而非UI所在的線程處理的時候會出現(xiàn)一個問題。

當(dāng) onReceive() 開啟一個線程并返回后,整個程序(包括新建的線程)狀態(tài)是非激活的(除非此進(jìn)程中有其他激活的組件), 因此這個進(jìn)程就有被中止的危險。解決這個問題的辦法是onReceive() 方法啟動一個Android Service 生命周期,讓sercie去做耗時的工作,這樣系統(tǒng)就知道此進(jìn)程中還有活動的工作。

到此,相信大家對“Android中Service有什么生命周期”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

當(dāng)前標(biāo)題:Android中Service有什么生命周期
網(wǎng)頁URL:http://bm7419.com/article10/jcipdo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司、自適應(yīng)網(wǎng)站、微信小程序、服務(wù)器托管、面包屑導(dǎo)航、電子商務(wù)

廣告

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

手機(jī)網(wǎng)站建設(shè)