Android 啟動 Service(startservice和bindservice) 兩種方式的區(qū)別
Android Service 生命周期可以促使移動設(shè)備的創(chuàng)新,讓用戶體驗到最優(yōu)越的移動服務(wù),只有broadcast receivers執(zhí)行此方法的時候才是激活的,當(dāng) onReceive()返回的時候,它就是非激活狀態(tài)。
如果沒有程序停止它或者它自己停止,service將一直運行。在這種模式下,service開始于調(diào)用Context.startService() ,停止于Context.stopService(). service可以通過調(diào)用Android Service 生命周期() 或 Service.stopSelfResult()停止自己。不管調(diào)用多少次startService() ,只需要調(diào)用一次 stopService() 就可以停止service。
可以通過接口被外部程序調(diào)用。外部程序建立到service的連接,通過連接來操作service。建立連接調(diào)開始于Context.bindService(), 結(jié)束于Context.unbindService(). 多個客戶端可以綁定到同一個service,如果service沒有啟動, bindService() 可以選擇啟動它。
服務(wù)不能自己運行,需要通過調(diào)用Context.startService()或Context.bindService()方法啟動服務(wù)。這兩個方法都 可以啟動Service,但是它們的使用場合有所不同。使用startService()方法啟用服務(wù),調(diào)用者與服務(wù)之間沒有關(guān)連,即使調(diào)用者退出了,服 務(wù)仍然運行。使用bindService()方法啟用服務(wù),調(diào)用者與服務(wù)綁定在了一起,調(diào)用者一旦退出,服務(wù)也就終止,大有“不求同時生,必須同時死”的 特點。
如果打算采用Context.startService()方法啟動服務(wù),在服務(wù)未被創(chuàng)建時,系統(tǒng)會先調(diào)用服務(wù)的onCreate()方法,接著調(diào)用onStart()方法。如果調(diào)用startService()方法前服務(wù)已經(jīng)被創(chuàng)建,多次調(diào)用startService()方法并不會導(dǎo)致多次創(chuàng)建服務(wù),但會導(dǎo)致多次調(diào)用onStart()方法。采用startService()方法啟動的服務(wù),只能調(diào)用Context.stopService()方法結(jié)束服務(wù),服務(wù)結(jié)束時會調(diào)用onDestroy()方法。
如果打算采用Context.bindService()方法啟動服務(wù),在服務(wù)未被創(chuàng)建時,系統(tǒng)會先調(diào)用服務(wù)的 onCreate()方法,接著調(diào)用onBind()方法。這個時候調(diào)用者和服務(wù)綁定在一起,調(diào)用者退出了,系統(tǒng)就會先調(diào)用服務(wù)的onUnbind()方 法,接著調(diào)用onDestroy()方法。如果調(diào)用bindService()方法前服務(wù)已經(jīng)被綁定,多次調(diào)用bindService()方法并不會導(dǎo)致 多次創(chuàng)建服務(wù)及綁定(也就是說onCreate()和onBind()方法并不會被多次調(diào)用)。如果調(diào)用者希望與正在綁定的服務(wù)解除綁定,可以調(diào)用 unbindService()方法,調(diào)用該方法也會導(dǎo)致系統(tǒng)調(diào)用服務(wù)的onUnbind()-->onDestroy()方法。
總結(jié):Service 的兩種啟動方法和區(qū)別
Service的生命周期方法onCreate, onStart, onDestroy
有兩種方式啟動一個Service,他們對Service生命周期的影響是不一樣的。
1 通過startService
Service會經(jīng)歷 onCreate -> onStart
stopService的時候直接onDestroy
如果是調(diào)用者自己直接退出而沒有調(diào)用stopService的話,Service會一直在后臺運行。下次調(diào)用者再起來可以stopService。
2 通過bindService
Service只會運行onCreate, 這個時候服務(wù)的調(diào)用者和服務(wù)綁定在一起
調(diào)用者退出了,Srevice就會調(diào)用onUnbind->onDestroyed所謂綁定在一起就共存亡了。并且這種方式還可以使得
調(diào)用方(例如)調(diào)用服務(wù)上的其他的方法。
相關(guān)文章
Android 如何實現(xiàn)彈窗順序&優(yōu)先級控制
這篇文章主要介紹了Android 如何實現(xiàn)彈窗順序&優(yōu)先級控制,幫助大家更好的理解和學(xué)習(xí)使用Android,感興趣的朋友可以了解下2021-03-03Android 個人理財工具二:使用SQLite實現(xiàn)啟動時初始化數(shù)據(jù)
本文主要介紹 Android 使用SQLite實現(xiàn)啟動時初始化數(shù)據(jù),這里對SQLite 的數(shù)據(jù)庫進行詳解,附有示例代碼,有興趣的小伙伴可以參考下2016-08-08Android使用Notification實現(xiàn)寬視圖通知欄(二)
這篇文章主要為大家詳細介紹了Android使用Notification實現(xiàn)寬視圖通知欄,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-12-12Android實現(xiàn)多點觸控,自由縮放圖片的實例代碼
本篇文章主要介紹了Android實現(xiàn)多點觸控,自由縮放圖片的實例代碼,可以自由地對圖片進行縮放和移動,非常具有實用價值,需要的朋友可以參考下。2016-12-12