Android四大組件之Service詳解
一、Service簡介
Service是Android程序中四大基礎組件之一,它和Activity一樣都是Context的子類,只不過它沒有UI界面,是在后臺運行的組件。
Service是Android中實現(xiàn)程序后臺運行的解決方案,它非常適用于去執(zhí)行那些不需要和用戶交互而且還要求長期運行的任務。Service默認并不會運行在子線程中,它也不運行在一個獨立的進程中,它同樣執(zhí)行在UI線程中,因此,不要在Service中執(zhí)行耗時的操作,除非你在Service中創(chuàng)建了子線程來完成耗時操作。
二、Service生命周期
1.startService / stopService
生命周期順序:onCreate->onStartCommand->onDestroy
OnCreate()
系統(tǒng)在service第一次創(chuàng)建時執(zhí)行此方法,來執(zhí)行只運行一次的初始化工作。如果service已經(jīng)運行,這個方法不會被調(diào)用。
onStartCommand()
每次客戶端調(diào)用startService()方法啟動該Service都會回調(diào)該方法(多次調(diào)用)。一旦這個方法執(zhí)行,service就啟動并且在后臺長期運行。通過調(diào)用stopSelf()或stopService()來停止服務。
OnDestory()
系統(tǒng)在service不再被使用并要銷毀時調(diào)用此方法(一次調(diào)用)。service應在此方法中釋放資源,比如線程,已注冊的偵聽器,接收器等等.這是service收到的最后一個調(diào)用。
2.bindService / unbindService
生命周期順序:onCreate->onBind->onUnBind->onDestroy
同樣首先是OnCreate(),接著是
OnBind()
當組件調(diào)用bindService()想要綁定到service時(比如想要執(zhí)行進程間通訊)系統(tǒng)調(diào)用此方法(一次調(diào)用,一旦綁定后,下次再調(diào)用bindService()不會回調(diào)該方法)。在你的實現(xiàn)中,你必須提供一個返回一個IBinder來以使客戶端能夠使用它與service通訊,你必須總是實現(xiàn)這個方法,但是如果你不允許綁定,那么你應返回null。
OnUnbind()
當前組件調(diào)用unbindService(),想要解除與service的綁定時系統(tǒng)調(diào)用此方法(一次調(diào)用,一旦解除綁定后,下次再調(diào)用unbindService()會拋出異常)。
最后是OnDestory()
注意:通過bindService啟動的Service的生命周期依附于啟動它的Context。
總結
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。如果你想了解更多相關內(nèi)容請查看下面相關鏈接
相關文章
Android中自定義ImageView添加文字設置按下效果詳解
這篇文章主要給大家介紹了關于Android中自定義ImageView添加文字設置按下效果的相關資料,實現(xiàn)后的效果非常利用用戶的體驗,文中給出了詳細的示例代碼供大家參考學習,需要的朋友們下面隨著小編來一起學習學習下吧。2017-08-08Android開源AndroidSideMenu實現(xiàn)抽屜和側滑菜單
這篇文章主要為大家詳細介紹了Android開源AndroidSideMenu實現(xiàn)抽屜和側滑菜單,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-02-02Android系統(tǒng)狀態(tài)欄定制圖標顯示邏輯控制
這篇文章主要為大家介紹了Android系統(tǒng)狀態(tài)欄定制圖標顯示邏輯控制,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-10-10Android項目實戰(zhàn)手把手教你畫圓形水波紋loadingview
這篇文章主要為大家詳細介紹了Android項目實戰(zhàn)手把手教你畫圓形水波紋loadingview,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-01-01Android 自定義view實現(xiàn)水波紋動畫效果
這篇文章主要介紹了 Android 自定義view實現(xiàn)水波紋動畫效果的實例代碼,非常不錯,具有參考借鑒價值,需要的朋友參考下吧2017-01-01