以前对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又可以灵活的控制,从而灵活控制后台工作的运行。