Android 啟動 Service(startservice和bindservice) 兩種方式的區(qū)別
Android Service 生命周期可以促使移動設(shè)備的創(chuàng)新,讓用戶體驗(yàn)到最優(yōu)越的移動服務(wù),只有broadcast receivers執(zhí)行此方法的時(shí)候才是激活的,當(dāng) onReceive()返回的時(shí)候,它就是非激活狀態(tài)。
如果沒有程序停止它或者它自己停止,service將一直運(yùn)行。在這種模式下,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(). 多個(gè)客戶端可以綁定到同一個(gè)service,如果service沒有啟動, bindService() 可以選擇啟動它。
服務(wù)不能自己運(yùn)行,需要通過調(diào)用Context.startService()或Context.bindService()方法啟動服務(wù)。這兩個(gè)方法都 可以啟動Service,但是它們的使用場合有所不同。使用startService()方法啟用服務(wù),調(diào)用者與服務(wù)之間沒有關(guān)連,即使調(diào)用者退出了,服 務(wù)仍然運(yùn)行。使用bindService()方法啟用服務(wù),調(diào)用者與服務(wù)綁定在了一起,調(diào)用者一旦退出,服務(wù)也就終止,大有“不求同時(shí)生,必須同時(shí)死”的 特點(diǎn)。
如果打算采用Context.startService()方法啟動服務(wù),在服務(wù)未被創(chuàng)建時(shí),系統(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é)束時(shí)會調(diào)用onDestroy()方法。
如果打算采用Context.bindService()方法啟動服務(wù),在服務(wù)未被創(chuàng)建時(shí),系統(tǒng)會先調(diào)用服務(wù)的 onCreate()方法,接著調(diào)用onBind()方法。這個(gè)時(shí)候調(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
有兩種方式啟動一個(gè)Service,他們對Service生命周期的影響是不一樣的。
1 通過startService
Service會經(jīng)歷 onCreate -> onStart
stopService的時(shí)候直接onDestroy
如果是調(diào)用者自己直接退出而沒有調(diào)用stopService的話,Service會一直在后臺運(yùn)行。下次調(diào)用者再起來可以stopService。
2 通過bindService
Service只會運(yùn)行onCreate, 這個(gè)時(shí)候服務(wù)的調(diào)用者和服務(wù)綁定在一起
調(diào)用者退出了,Srevice就會調(diào)用onUnbind->onDestroyed所謂綁定在一起就共存亡了。并且這種方式還可以使得
調(diào)用方(例如)調(diào)用服務(wù)上的其他的方法。
相關(guān)文章
Android學(xué)習(xí)筆記之ContentProvider和Uri詳解
本篇文章主要介紹了Android學(xué)習(xí)筆記之ContentProvider和Uri詳解,對于學(xué)習(xí)Android的朋友具有一定的參考價(jià)值,有需要可以可以了解一下。2016-11-11
解析:繼承ViewGroup后的子類如何重寫onMeasure方法
本篇文章是對繼承ViewGroup后的子類如何重寫onMeasure方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06
Android編程實(shí)現(xiàn)號碼歸屬地查詢的方法
這篇文章主要介紹了Android編程實(shí)現(xiàn)號碼歸屬地查詢的方法,涉及Android xml文件的發(fā)送及WebService的操作技巧,需要的朋友可以參考下2016-01-01
Android開發(fā)實(shí)現(xiàn)布局中為控件添加選擇器的方法
這篇文章主要介紹了Android開發(fā)實(shí)現(xiàn)布局中為控件添加選擇器的方法,涉及Android開發(fā)中布局設(shè)置的相關(guān)操作技巧,需要的朋友可以參考下2017-10-10
Android PreferenceActivity與PreferenceFragment詳解及簡單實(shí)例
這篇文章主要介紹了Android PreferenceActivity與PreferenceFragment詳解及簡單實(shí)例的相關(guān)資料,需要的朋友可以參考下2016-12-12
Android RecyclerView自定義上拉和下拉刷新效果
這篇文章主要為大家詳細(xì)介紹了Android RecyclerView自定義上拉和下拉刷新效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-02-02
Android SharedPreferences存取操作以及封裝詳解
SharedPreferences是安卓平臺上一個(gè)輕量級的存儲類,用來保存應(yīng)用的一些常用配置,比如Activity狀態(tài),Activity暫停時(shí),將此activity的狀態(tài)保存到SharedPereferences中;當(dāng)Activity重載,系統(tǒng)回調(diào)方法onSaveInstanceState時(shí),再從SharedPreferences中將值取出2021-11-11

