清晰地理解Service

定义:

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


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容