欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android Service生命周期詳解

 更新時間:2021年09月08日 08:28:09   作者:chongyucaiyan  
這篇文章主要介紹了Android Service生命周期詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下

前言

Service是Android系統(tǒng)的四大組件之一。在Android系統(tǒng)中,Service可以用來執(zhí)行一些需要在后臺長期運行的任務,也可以用來為其它應用提供一些服務。Service的使用方式主要有兩種:startService()和bindService()。這兩種方式下Service的生命周期不大相同。通過熟悉Service的生命周期,我們可以更加深刻地理解Android系統(tǒng)中Service的工作機制。

基礎(chǔ)知識

一個Service不是一個單獨的進程。Service本身不是運行在一個單獨的進程中,除非在AndroidManifest.xml文件中指定了android:process屬性。默認情況下,Service運行在應用所在的那個進程中。一個Service也不是一個線程。Service運行在應用的主線程中,所以如果要執(zhí)行耗時的后臺任務那么需要在子線程之中執(zhí)行。

Service的生命周期

根據(jù)使用方式的不同,Service的生命周期可以分成2條路徑,具體可以看下面這張引用自Android官網(wǎng)的圖:

Service的生命周期.png

下面詳細分析一下這些回調(diào)方法。

  • onCreate() 當Service被創(chuàng)建時回調(diào)。如果Service已經(jīng)在運行,那么不會回調(diào)onCreate()方法。在onCreate()方法中,我們可以做一些初始化操作。
  • onStartCommand() 當有組件調(diào)用startService()方法啟動Service時回調(diào)。在onStartCommand()方法中,我們可以執(zhí)行后臺任務。由于Service是運行在主線程之中的,所以如果是耗時的任務那么需要使用子線程來執(zhí)行任務。在Service完成任務之后,需要有組件調(diào)用stopService()方法來停止Service,或者由Service調(diào)用stopSelf()方法來自行停止。
  • onBind() 當有組件調(diào)用bindService()方法與Service綁定時回調(diào)。在onBind()方法中,你可以通過返回一個IBinder對象來提供一個接口供客戶端與Service進行通信。
  • onUnbind() 當客戶端調(diào)用unbindService()方法與Service解除綁定時回調(diào)。
  • onDestroy() 當Service停止運行將被銷毀時回調(diào)。當有組件調(diào)用startService()方法來啟動Service時,Service開始運行。直到有組件調(diào)用stopService()方法來停止Service,或者由Service調(diào)用stopSelf()方法來自行停止。當有組件調(diào)用bindService()方法與Service綁定時,Service開始運行。直到所有的客戶端與Service解綁時,Service停止運行。在onDestroy()方法中,我們應該釋放所有的資源,比如子線程、注冊的監(jiān)聽器和廣播接收器等。

總結(jié)

根據(jù)使用方式的不同,Service的生命周期可以分成2條路徑:

  • 啟動Service Service在有組件調(diào)用startService()方法時創(chuàng)建,然后一直運行下去。組件可以通過調(diào)用stopService()方法來停止Service,或者Service調(diào)用stopSelf()方法來自行停止。Service停止之后,系統(tǒng)會將其銷毀。
  • 綁定Service Service在有組件調(diào)用bindService()方法時創(chuàng)建。然后客戶端可以通過IBinder接口與Service進行通信。客戶端可以通過調(diào)用unbindService()方法來解除綁定。多個客戶端可以綁定到同一個Service,當所有的客戶端與Service解綁時,系統(tǒng)會銷毀該Service。

注意:Service可以同時以這兩種方式運行,也就是說,調(diào)用startService()方法啟動Service的同時可以調(diào)用bindService()方法綁定Service。這種情況下,只有當所有客戶端都解除綁定,并且有組件調(diào)用stopService()方法或者Service調(diào)用stopSelf()方法才可以停止Service。

我們可以總結(jié)出Service的2個生命期:

  • 完整生命期 從onCreate()方法回調(diào)開始,直到onDestroy()方法回調(diào)結(jié)束。與Activity類似,Service也在onCreate()方法中完成初始化工作,并在onDestroy()方法中釋放所有資源。
  • 活動生命期 從onStartCommand()或者onBind()方法回調(diào)開始。對于啟動Service,活動生命期與完整生命期同時結(jié)束。對于綁定Service,活動生命期在onUnbind()方法回調(diào)時結(jié)束。

例子

這里舉一個例子來實踐Service的生命周期。例子代碼地址:https://github.com/chongyucaiyan/ServiceDemo

demo頁面如下圖所示:

demo頁面.png

四個按鈕分別用來啟動Service,停止Service,綁定Service和解綁Service。

首先,我們實踐下啟動Service的生命周期。點擊Start Service按鈕啟動Service。使用LocalService關(guān)鍵字過濾,打印的日志如下圖所示:

啟動Service的日志.png

可以看到Service依次回調(diào)了onCreate()和onStartCommand()方法,并且兩個方法都是在主線程之中執(zhí)行的。接著再點擊兩次Start Service按鈕,打印的日志如下圖所示:

多次啟動Service的日志.png

可以看到Service運行之后,再次啟動Service不會再回調(diào)onCreate()方法,只會回調(diào)onStartCommand()方法。最后點擊Stop Service按鈕停止Service,打印的日志如下圖所示:

停止Service的日志.png

可以看到停止Service后,Service回調(diào)了onDestroy()方法。

然后,我們實踐下綁定Service的生命周期。點擊Bind Service按鈕綁定Service。打印的日志如下圖所示:

綁定Service的日志.png

可以看到Service依次回調(diào)了onCreate()和onBind()方法。接著再點擊兩次Bind Service按鈕,可以看到Service不再回調(diào)onBind()方法,因為同一個組件同一時間只能綁定一次。最后單擊Unbind Service按鈕解綁Service,打印的日志如下圖所示:

解綁Service的日志.png

可以看到Service依次回調(diào)了onUnbind()和onDestroy()方法。

最后,我們實踐下同時以兩種方式操作Service的生命周期。點擊Start Service按鈕啟動Service,點擊Bind Service按鈕綁定Service,打印的日志如下圖所示:

啟動并綁定Service的日志.png

可以看到啟動Service回調(diào)了onStartCommand()方法,綁定Service回調(diào)了onBind()方法,Service正常運行。這種情況下,只有客戶端解除綁定,并且組件調(diào)用stopService()方法,才可以停止Service。依次點擊Unbind Service和Stop Service按鈕,打印的日志如下圖所示:

停止啟動并綁定的Service的日志.png

可以看到只有上述兩種操作都執(zhí)行完畢之后,Service才回調(diào)了onDestroy()方法。

參考

到此這篇關(guān)于Android Service生命周期詳解的文章就介紹到這了,更多相關(guān)Android Service生命周期內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Android Studio 下 Flutter 開發(fā)環(huán)境搭建過程

    Android Studio 下 Flutter 開發(fā)環(huán)境搭建過程

    這篇文章主要介紹了Android Studio 下 Flutter 開發(fā)環(huán)境搭建/Flutter / Dart 插件安裝 | Flutter SDK 安裝 | 環(huán)境變量配置 | 開發(fā)環(huán)境檢查,本文圖文并茂給大家介紹的非常詳細,需要的朋友可以參考下
    2020-03-03
  • Android中的Launch Mode詳情

    Android中的Launch Mode詳情

    這篇文章主要介紹了Android中的Launch Mode詳情,文章圍繞主題的相關(guān)資料展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-06-06
  • Android ViewPager的MVP架構(gòu)搭建過程

    Android ViewPager的MVP架構(gòu)搭建過程

    本文主要介紹了ViewPager在Android中的作用以及使用場景,如引導頁、圖片瀏覽器、新聞或文章內(nèi)容的多標簽頁等,同時,還詳細闡述了如何通過MVP架構(gòu)來搭建ViewPager,將視圖和邏輯進行解耦,提高代碼的可測試性、可復用性,使代碼結(jié)構(gòu)更清晰且易于擴展功能
    2024-10-10
  • Android webview使用方法總結(jié)

    Android webview使用方法總結(jié)

    這篇文章主要介紹了Android webview使用方法總結(jié)的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • Android APK使用Debug簽名重新打包 Eclipse更改默認Debug簽名

    Android APK使用Debug簽名重新打包 Eclipse更改默認Debug簽名

    這篇文章主要介紹了Android APK使用Debug簽名重新打包 Eclipse更改默認Debug簽名等內(nèi)容,需要的朋友可以參考下
    2015-04-04
  • Android獲取wifi列表的方法

    Android獲取wifi列表的方法

    這篇文章主要為大家詳細介紹了Android獲取wifi列表的方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • Android實現(xiàn)多媒體錄音筆

    Android實現(xiàn)多媒體錄音筆

    這篇文章主要介紹了Android實現(xiàn)多媒體錄音筆的相關(guān)資料,以及在實現(xiàn)過程中遇到問題的解決方法,感興趣的小伙伴們可以參考一下
    2016-01-01
  • Android中Activity組件實例介紹

    Android中Activity組件實例介紹

    大家好,本篇文章主要講的是Android中Activity組件實例介紹,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01
  • Android中Listview點贊功能的實現(xiàn)

    Android中Listview點贊功能的實現(xiàn)

    最近一段時間在研究android方面的知識,利用listview實現(xiàn)點贊功能,下面小編通過本文給大家介紹下基本思路,需要的朋友可以參考下
    2016-11-11
  • Android傳感器的簡單使用方法

    Android傳感器的簡單使用方法

    這篇文章主要為大家詳細介紹了Android傳感器的簡單使用方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-09-09

最新評論