中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android中Service的生命周期有哪些

發布時間:2021-07-12 13:59:16 來源:億速云 閱讀:117 作者:Leah 欄目:移動開發

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

Managing the Lifecycle of a Service

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

A started service

  被開啟的service通過其他組件調用 startService()被創建。

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

  當service被停止時,系統會銷毀它。

A bound service

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

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

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

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

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

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

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

Implementing the lifecycle callbacks

  和activity一樣,service也有一系列的生命周期回調函數,你可以實現它們來監測service狀態的變化,并且在適當的時候執行適當的工作。

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

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    }
}

Android中Service的生命周期有哪些

  不像是activity的生命周期回調函數,你不需要調用基類的實現。

 Android中Service的生命周期有哪些

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

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

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

The entire lifetime

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

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

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

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

The active lifetime

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

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

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

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

Managing the Lifecycle of a Bound Service

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

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

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

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

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

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

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

平顶山市| 连云港市| 屏东市| 霞浦县| 安宁市| 普陀区| 资源县| 葫芦岛市| 潮安县| 萨迦县| 错那县| 吴堡县| 延庆县| 陵水| 大竹县| 昭平县| 靖江市| 壶关县| 忻城县| 宁远县| 神池县| 合阳县| 南澳县| 台南县| 漳浦县| 玛曲县| 满城县| 延津县| 米易县| 湟源县| 东乡族自治县| 林州市| 济源市| 谢通门县| 海晏县| 本溪| 新宾| 平凉市| 申扎县| 炉霍县| 上高县|