Service概述
Android的Service在主线程中,运行在后台,不依赖于用户界面,不需要显示界面,由于运行在主线程中,故不可做耗时操作,应用场景:后台播放音乐等不需要界面显示的功能
- 服务种类
- 本地服务(LocalService)
依附在主进程上,而不是独立存在的进程,节约内存资源,伴随主进程一同存在或者消亡,不需要aidl接口,绑定方便
- 远程服务(RemoteService)
独立存在,单独的进程,不需要依附于其它进程,即便应用改服务的进程被kill,该服务也不会消亡,独立存在的服务具有较高的灵活性,可为多个进程同时提供服务,独立存在会暂用资源,且使用aidl的教麻烦
Service方法说明
- Service的两种启动方式对应的方法说明(下图为生命周期表)
1:startService方式启动(启动一个执行在后台不可进行通信的服务,调用者退出后Service仍然存在)
第一次启动服务
再次启动服务
停止服务
2:bindService方式启动(启动一个执行在后台可进行通信的服务,调用者退出后Service随着调用者销毁)
绑定服务
解绑服务
3:先startService再bindService方式启动(启动一个执行在后台可进行通信的服务,调用者退出后仍然存在)
综合startService和bindService理解
- 在Service的生命周期里,常用的方法有:
1:手动调用的方法
手动调用方法 | 作用 |
---|---|
startService() | 启动服务 |
stopService() | 关闭服务 |
bindService() | 绑定服务 |
unbindService() | 解绑服务 |
2:自动调用的方法
自动调用方法 | 作用 |
---|---|
onCreat() | 创建服务 |
onStartCommand() | 开始服务 |
onDestroy() | 销毁服务 |
onBind() | 绑定服务 |
onUnbind() | 解绑服务 |
备注:bindService函数的第三个参数传值不同会导致逻辑不同
BIND_AUTO_CREATE:手动掉用startService
之后,接着再调用bindService
,此时调用stopService
不会执行onDestroy
,需要unbindService
后方可执行onDestroy
具体指请详见:
https://www.cnblogs.com/duadu/p/6167315.html
Service总结
service是安卓四大组建之一,不依赖UI存在,分为本地服务和远程服务,区别在于是否依赖主进程或独立存在,service是存于主线程中,会阻塞线程,故不能将耗时操作置于主线程中,Service可以独立运行在安卓后台,进行跨进程访问
注释:学识甚浅,大家仅作参考