以前對Service總是有點不理解,官方指南上來就說什么Android四大組件之一,用來干后臺耗時操作。然后又說Service本身運行在主線程,如果需要耗時操作還需要在Service中創建Thread做耗時操作,bulabula(╯□╰)。既然Thread可以直接干后臺的工作我何苦在你Service中創建Thread干后臺工作。
我相信很多同學也都有這種疑問,其實之所以會有這種疑問,我覺得是大家被這句不負責任或者不嚴謹的話給洗腦了,只要一說到Service就拿這句話來介紹,來忽悠。
這句話其實含義有兩層:
- Service是一個“組件”。在設計上跟另一個組件Activity的區別是它是看不見的,即如果需要看不見的(也就是它說的后臺的)操作,那就用Service吧。Android系統保證它的生命周期,它不會像Activity那樣只要界面消失了(back掉或者home掉)就有死掉的危險。
- Service也只是一個組件,它不是Thread,它不重新創建線程,那些你在Service生命周期方法中做的操作都是運行在主線程的,除非你主動放到了其他線程中。很多事情你終歸還是要放到Thread中,但Thread放到Service中就能保證其運行周期。因為Android系統是可以保證Service生命周期的,也就可以保證Thread中long-running工作的穩定。另外Service生命周期Api又可以靈活的控制,從而靈活控制后臺工作的運行。