文章目录
Android Service服务的相关介绍
创建方式
启动方式
生命周期
onStartCommand参数及返回值的理解
ServiceConnection
场景说明
前台服务
问答
startService和bindService顺序的影响
如果你的服务也想让其他应用启动那该怎么办
其他
参考
Android Service服务的相关介绍
android service是一种运行在后台,不需要与用户交互的任务
service不是运行在单独的进程中的(当然,如果你想的话也是可以在单独的进程中的),本身还是运行在主线程中,因此如果后台服务是个耗时任务,那么必须得开启线程去执行(因此出现了IntentService)
当进程被杀死,依赖该进程的服务也会被杀死,也就是说当app应用进程被杀死时,服务也停止了,因此不存在说app挂了而它的服务还在跑的情况
实际上service可以理解为一个没有界面的activity,它可以默默地在后台处理一些任务
创建方式
在android中使用service其实很简单,就是继承Service即可,然后在相应的生命周期函数里实现一些功能
当然,作为四大组件之一的service,别完了在清单文件中配置一下servic,不然服务是跑不起来的
生命周期里有个onBind方法,这个onBind是干嘛的呢
一般情况下,如果我们的服务启动后就只是默默地做它自己的任务,不想与外界有任何交流,那么就可以在onBind这个方法里返回null
但假如我们的服务可以对外开放自己的一些能力(在代码里就是开放一堆方法供外界调用),那么就可以把这些要开放的东西写在一个类里,而这个类要实现IBinder接口,然后我们可以在Service类里实例这个IBinder对象,在onBind这个方法里返回这个实例对象
这样客户端连接到这个服务时,就可以拿到这个实例对象,然后就可以愉快地调用服务开放的能力了
启动方式
当服务都写好了,那么该怎么启动这个服务呢
service有两种启动方式,startService和bindService
这两种方式的区别是bindService方式可以被多个Activity绑定,当所有绑定的都解绑后服务才有可能会销毁,之所以说可能,是因为假如服务在bindService之前已经startService了,那么即使后面都解绑了,服务依然会存在
startService一旦跑起来,除非调用stopService或stopSelf或者应用被杀死,否则服务会一直存在,即使中间有人通过unbindService解绑,服务也不会销毁