定義:
Service 是一種運(yùn)行在后臺(tái)的服務(wù),分為本地服務(wù)和遠(yuǎn)程服務(wù).
- 本地服務(wù)是依賴于主線程而存在的,而不是單獨(dú)個(gè)體的線程,不需要使用太多的資源
- 遠(yuǎn)程服務(wù)為獨(dú)立的進(jìn)程,對(duì)應(yīng)進(jìn)程名格式為所在包名加上你指定的android:process字符串乡革。由于是獨(dú)立的進(jìn)程迫皱,因此在Activity所在進(jìn)程被Kill的時(shí)候,該服務(wù)依然在運(yùn)行昙沦,
1.Service的start和bind狀態(tài)有什么區(qū)別琢唾?
Service分為兩種啟動(dòng)方式一種是startService,還有就是BindService.下面分別說下startService和BindService
- startService 啟動(dòng)Service時(shí) ,表示的是啟動(dòng)這個(gè)Service,這個(gè)時(shí)候的Service的生命周期是:onCreate,onStartCommond,onDestory,該Service停止的方法是 StopService.
- BindService 啟動(dòng)Service時(shí),表示的是綁定這個(gè)Service,這個(gè)時(shí)候Service的生命周期是 onCreate,onBind,Service停止的方法調(diào)用的是UnBindService
2.同一個(gè)Service,先startService盾饮,然后再bindService采桃,如何把它停止掉懒熙?
當(dāng)一個(gè)Service被先startService后再次被bindService了,或者多次被bindService,我覺得應(yīng)該是不管是多次還是一次,有且只調(diào)用一次UnBindService.然后再StopService.就可以停止掉了
3.你有注意到Service的onStartCommand方法的返回值嗎?不同返回值有什么區(qū)別普办?
onStartCommand的返回值有四種:
START_NOT_STICKY
如果當(dāng)你的Service 在onStartCommand方法返回START_NOT_STICKY ,則當(dāng)跑完onStartCommand后 殺死了該服務(wù),那么只有當(dāng)新的Intent傳進(jìn)onStartCommand 才會(huì)被重建否則不會(huì)重建,這是最安全的方法.
START_STICKY
如果當(dāng)你的Service 在onStartCommand方法返回START_STICKY,則當(dāng)跑完onStartCommand后 殺死了該服務(wù),系統(tǒng)會(huì)重新創(chuàng)建Service,但這里的Intent不再是沒殺死之前的Intent而是系統(tǒng)給分配的一個(gè)新的Intent.該Intent為空.
START_REDELIVER_INTENT
如果系統(tǒng)在onStartCommand()方法返回后工扎,系統(tǒng)就會(huì)重新創(chuàng)建了這個(gè)服務(wù),并且用發(fā)送給這個(gè)服務(wù)的最后的Intent對(duì)象調(diào)用了onStartCommand()方法衔蹲。任意等待中的Intent對(duì)象會(huì)依次被發(fā)送肢娘。這適用于那些應(yīng)該立即恢復(fù)正在執(zhí)行的工作的服務(wù),如下載文件
4.Service的生命周期方法onCreate舆驶、onStart橱健、onBind等運(yùn)行在哪個(gè)線程?
Service 是默認(rèn)在主線程中運(yùn)行的