Android Service总结
参考文章
Android总结篇系列:Android Service
【Android】远程服务(Remote Service)的使用
Android四大组件:Service服务史上最全面解析
startService与bindService的区别
为什么要有Service
在现实世界的工作中,我们做一件事情的完整过程:领导指示做什么事、去执行、保存成果、报告完成,抽象之后:交互、执行、存储、通信四个部分组成,Android四大组件就是干这个的,当然,Activity除了可以完成交互任务,也可以做事情;数据共享不只有ContentPovider一种方式;组件之间通信可以有很多种实现如EventBus。但是涉及到跨进程(不同APP)的视图调用、数据共享、消息通信和业务执行,使用这四个组件就非常有必要了。Service是Android四大组件之一,它的主要任务是做事情(苦力)!所以Service是必须的:
Activity==交互:用于和用户交互;
Service==做事:属于Android中的计算型组件,不依赖于用户可视的UI界面,提供需要在后台长期运行的服务(如复杂计算、下载等等)。特点是长生命周期的、没有用户界面、在后台运行;
ContentPovider==共享:用于数据共享(组件之间、线程之间、进程之间);
BroadCast==通信:用于组件之间、进程之间的通知播报。
Service 分类
运行地点分:
本地服务(LocalService)
远程服务(RemoteService)
可见性分类:
前台Service
后台Service
可通信性分类:
可通信的Service
不可通信Service
需要注意的是
1、本地服务是在主线程中,如果有耗时的操作,Service应该开启新的线程去执行;本地服务在APK的主线程结束后肯定会被kill掉;如果我们不手动的结束掉自己的Service,它会一直在后台;
2、远程服务(Remote Service)是独立进程,用于系统服务或者干坏事的.
startService和bindService有很多不同的地方
(1)生命周期不同
请看下图他们的生命周期:
(2)结束方式不同
还是看上图!
startService,有两种方式结束,stopSelf(自杀)+stopService(他杀)。如果有人采用bindService这个服务,必须等到unbindService之后才能stopService。
binService,当所有关联方全部unbindService之后才会结束;即使你用stopService也不行。一个bindService对象结束掉会自动unbindService。
(3)应用场景不同
startService方式无法与Service进行通信,可以通过BroadCast方式解决,交互频繁性能不高;bindService是可以的,如果你需要和Service通信,那么请采用bindService方式,当然你的Service要支持通信才行。
IntentService
RemoteService
未完待续