清晰地理解Service

weixin_33913332發表於2018-07-09

定義:

Service 是一種執行在後臺的服務,分為本地服務和遠端服務.

  • 本地服務是依賴於主執行緒而存在的,而不是單獨個體的執行緒,不需要使用太多的資源
  • 遠端服務為獨立的程式,對應程式名格式為所在包名加上你指定的android:process字串。由於是獨立的程式,因此在Activity所在程式被Kill的時候,該服務依然在執行,

1.Service的start和bind狀態有什麼區別?

Service分為兩種啟動方式一種是startService,還有就是BindService.下面分別說下startService和BindService

  • startService 啟動Service時 ,表示的是啟動這個Service,這個時候的Service的生命週期是:onCreate,onStartCommond,onDestory,該Service停止的方法是 StopService.
  • BindService 啟動Service時,表示的是繫結這個Service,這個時候Service的生命週期是 onCreate,onBind,Service停止的方法呼叫的是UnBindService

2.同一個Service,先startService,然後再bindService,如何把它停止掉?

當一個Service被先startService後再次被bindService了,或者多次被bindService,我覺得應該是不管是多次還是一次,有且只呼叫一次UnBindService.然後再StopService.就可以停止掉了


3.你有注意到Service的onStartCommand方法的返回值嗎?不同返回值有什麼區別?

onStartCommand的返回值有四種:

START_NOT_STICKY

如果當你的Service 在onStartCommand方法返回START_NOT_STICKY ,則當跑完onStartCommand後 殺死了該服務,那麼只有當新的Intent傳進onStartCommand 才會被重建否則不會重建,這是最安全的方法.

START_STICKY

如果當你的Service 在onStartCommand方法返回START_STICKY,則當跑完onStartCommand後 殺死了該服務,系統會重新建立Service,但這裡的Intent不再是沒殺死之前的Intent而是系統給分配的一個新的Intent.該Intent為空.

START_REDELIVER_INTENT

如果系統在onStartCommand()方法返回後,系統就會重新建立了這個服務,並且用傳送給這個服務的最後的Intent物件呼叫了onStartCommand()方法。任意等待中的Intent物件會依次被髮送。這適用於那些應該立即恢復正在執行的工作的服務,如下載檔案

4.Service的生命週期方法onCreate、onStart、onBind等執行在哪個執行緒?

Service 是預設在主執行緒中執行的


相關文章