日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android Service 生命周期

發(fā)布時間:2023/12/9 Android 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android Service 生命周期 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Android Service的生命周期

?

Managing the Lifecycle of a Service

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

A started service

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

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

  當service被停止時,系統(tǒng)會銷毀它。

?

A bound service

  被綁定的service是當其他組件(一個客戶)調(diào)用bindService()來創(chuàng)建的。

  客戶可以通過一個IBinder接口和service進行通信。

  客戶可以通過?unbindService()方法來關(guān)閉這種連接。

  一個service可以同時和多個客戶綁定,當多個客戶都解除綁定之后,系統(tǒng)會銷毀service。

?

  這兩條路徑并不是完全分開的。

  即是說,你可以和一個已經(jīng)調(diào)用了?startService()而被開啟的service進行綁定。

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

?

Implementing the lifecycle callbacks

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

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

public class ExampleService extends Service {int mStartMode; // indicates how to behave if the service is killedIBinder mBinder; // interface for clients that bindboolean mAllowRebind; // indicates whether onRebind should be used@Overridepublic void onCreate(){// The service is being created}@Overridepublic int onStartCommand(Intent intent, int flags, int startId){// The service is starting, due to a call to startService()return mStartMode;}@Overridepublic IBinder onBind(Intent intent){// A client is binding to the service with bindService()return mBinder;}@Overridepublic boolean onUnbind(Intent intent){// All clients have unbound with unbindService()return mAllowRebind;}@Overridepublic void onRebind(Intent intent){// A client is binding to the service with bindService(),// after onUnbind() has already been called}@Overridepublic void onDestroy(){// The service is no longer used and is being destroyed} }

?

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

?

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

  所以,一個被開啟的service仍然可能被綁定。

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

?

The entire lifetime

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

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

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

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

?

The active lifetime

  service積極活動的生命時間(active lifetime)是從onStartCommand()?onBind()被調(diào)用開始,它們各自處理由startService()或?bindService()方法傳過來的Intent對象。

  如果service是被開啟的,那么它的活動生命周期和整個生命周期一同結(jié)束。

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

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

?

Managing the Lifecycle of a Bound Service

  當綁定service和所有客戶端解除綁定之后,Android系統(tǒng)將會銷毀它,(除非它同時被onStartCommand()方法開啟)。

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

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

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

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

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

  下圖展示了這種service(被開啟,還允許綁定)的生命周期:

?

參考資料

  API Guides:Services

  http://developer.android.com/guide/components/services.html

  API Guides:Bound Services

  http://developer.android.com/guide/components/bound-services.html

轉(zhuǎn)載于:https://www.cnblogs.com/poorfish/p/4160585.html

總結(jié)

以上是生活随笔為你收集整理的Android Service 生命周期的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。