Android中Service的生命周期有哪些-創(chuàng)新互聯(lián)

Android中Service的生命周期有哪些,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。

創(chuàng)新互聯(lián)公司自2013年創(chuàng)立以來(lái),是專(zhuān)業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目做網(wǎng)站、網(wǎng)站制作網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元江北做網(wǎng)站,已為上家服務(wù),為江北各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:18982081108

Managing the Lifecycle of a Service

service的生命周期,從它被創(chuàng)建開(kāi)始,到它被銷(xiāo)毀為止,可以有兩條不同的路徑:

A started service

被開(kāi)啟的service通過(guò)其他組件調(diào)用 startService()被創(chuàng)建。

這種service可以無(wú)限地運(yùn)行下去,必須調(diào)用stopSelf()方法或者其他組件調(diào)用stopService()方法來(lái)停止它。

當(dāng)service被停止時(shí),系統(tǒng)會(huì)銷(xiāo)毀它。

A bound service

被綁定的service是當(dāng)其他組件(一個(gè)客戶(hù))調(diào)用bindService()來(lái)創(chuàng)建的。

客戶(hù)可以通過(guò)一個(gè)IBinder接口和service進(jìn)行通信。

客戶(hù)可以通過(guò) unbindService()方法來(lái)關(guān)閉這種連接。

一個(gè)service可以同時(shí)和多個(gè)客戶(hù)綁定,當(dāng)多個(gè)客戶(hù)都解除綁定之后,系統(tǒng)會(huì)銷(xiāo)毀service。

這兩條路徑并不是完全分開(kāi)的。

即是說(shuō),你可以和一個(gè)已經(jīng)調(diào)用了 startService()而被開(kāi)啟的service進(jìn)行綁定。

比如,一個(gè)后臺(tái)音樂(lè)service可能因調(diào)用 startService()方法而被開(kāi)啟了,稍后,可能用戶(hù)想要控制播放器或者得到一些當(dāng)前歌曲的信息,可以通過(guò)bindService()將一個(gè)activity和service綁定。這種情況下,stopService()或 stopSelf()實(shí)際上并不能停止這個(gè)service,除非所有的客戶(hù)都解除綁定。

Implementing the lifecycle callbacks

和activity一樣,service也有一系列的生命周期回調(diào)函數(shù),你可以實(shí)現(xiàn)它們來(lái)監(jiān)測(cè)service狀態(tài)的變化,并且在適當(dāng)?shù)臅r(shí)候執(zhí)行適當(dāng)?shù)墓ぷ鳌?/p>

下面的service展示了每一個(gè)生命周期的方法:

public class ExampleService extends Service
{    int mStartMode; // indicates how to behave if the service is killed
    IBinder mBinder; // interface for clients that bind
    boolean mAllowRebind; // indicates whether onRebind should be used
    @Override    public void onCreate()
    {        // The service is being created    }

    @Override    public int onStartCommand(Intent intent, int flags, int startId)
    {        // The service is starting, due to a call to startService()
        return mStartMode;
    }

    @Override    public IBinder onBind(Intent intent)
    {        // A client is binding to the service with bindService()
        return mBinder;
    }

    @Override    public boolean onUnbind(Intent intent)
    {        // All clients have unbound with unbindService()
        return mAllowRebind;
    }

    @Override    public void onRebind(Intent intent)
    {        // A client is binding to the service with bindService(),        // after onUnbind() has already been called    }

    @Override    public void onDestroy()
    {        // The service is no longer used and is being destroyed    }
}

不像是activity的生命周期回調(diào)函數(shù),你不需要調(diào)用基類(lèi)的實(shí)現(xiàn)。

 Android中Service的生命周期有哪些

這個(gè)圖說(shuō)明了service典型的回調(diào)方法,盡管這個(gè)圖中將開(kāi)啟的service和綁定的service分開(kāi),但是你需要記住,任何service都潛在地允許綁定。

所以,一個(gè)被開(kāi)啟的service仍然可能被綁定。

實(shí)現(xiàn)這些方法,你可以看到兩層嵌套的service的生命周期:

The entire lifetime

service整體的生命時(shí)間是從onCreate()被調(diào)用開(kāi)始,到onDestroy()方法返回為止。

和activity一樣,service在onCreate()中進(jìn)行它的初始化工作,在onDestroy()中釋放殘留的資源。

比如,一個(gè)音樂(lè)播放service可以在onCreate()中創(chuàng)建播放音樂(lè)的線程,在onDestory()中停止這個(gè)線程。

   onCreate() 和 onDestroy()會(huì)被所有的service調(diào)用,不論service是通過(guò)startService()還是bindService()建立。

The active lifetime

service積極活動(dòng)的生命時(shí)間(active lifetime)是從onStartCommand() 或onBind()被調(diào)用開(kāi)始,它們各自處理由startService()或 bindService()方法傳過(guò)來(lái)的Intent對(duì)象。

如果service是被開(kāi)啟的,那么它的活動(dòng)生命周期和整個(gè)生命周期一同結(jié)束。

如果service是被綁定的,它們它的活動(dòng)生命周期是在onUnbind()方法返回后結(jié)束。

注意:盡管一個(gè)被開(kāi)啟的service是通過(guò)調(diào)用 stopSelf() 或 stopService()來(lái)停止的,沒(méi)有一個(gè)對(duì)應(yīng)的回調(diào)函數(shù)與之對(duì)應(yīng),即沒(méi)有onStop()回調(diào)方法。所以,當(dāng)調(diào)用了停止的方法,除非這個(gè)service和客戶(hù)組件綁定,否則系統(tǒng)將會(huì)直接銷(xiāo)毀它,onDestory()方法會(huì)被調(diào)用,并且是這個(gè)時(shí)候唯一會(huì)被調(diào)用的回調(diào)方法。

Managing the Lifecycle of a Bound Service

當(dāng)綁定service和所有客戶(hù)端解除綁定之后,Android系統(tǒng)將會(huì)銷(xiāo)毀它,(除非它同時(shí)被onStartCommand()方法開(kāi)啟)。

因此,如果你的service是一個(gè)純粹的綁定service,那么你不需要管理它的生命周期。

然而,如果你選擇實(shí)現(xiàn)onStartCommand()回調(diào)方法,那么你必須顯式地停止service,因?yàn)閟ervice此時(shí)被看做是開(kāi)啟的。

這種情況下,service會(huì)一直運(yùn)行到它自己調(diào)用 stopSelf()或另一個(gè)組件調(diào)用stopService(),不論它是否和客戶(hù)端綁定。

另外,如果你的service被開(kāi)啟并且接受綁定,那么當(dāng)系統(tǒng)調(diào)用你的 onUnbind()方法時(shí),如果你想要在下次客戶(hù)端綁定的時(shí)候接受一個(gè)onRebind()的調(diào)用(而不是調(diào)用 onBind()),你可以選擇在 onUnbind()中返回true。

onRebind()的返回值為void,但是客戶(hù)端仍然在它的 onServiceConnected()回調(diào)方法中得到 IBinder 對(duì)象。

看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對(duì)創(chuàng)新互聯(lián)的支持。

另外有需要云服務(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ù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿(mǎn)足用戶(hù)豐富、多元化的應(yīng)用場(chǎng)景需求。

網(wǎng)站欄目:Android中Service的生命周期有哪些-創(chuàng)新互聯(lián)
本文來(lái)源:http://muchs.cn/article46/heehg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網(wǎng)站、定制開(kāi)發(fā)、外貿(mào)建站網(wǎng)站改版、手機(jī)網(wǎng)站建設(shè)域名注冊(cè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(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)站建設(shè)網(wǎng)站維護(hù)公司