定义:
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 是默认在主线程中运行的