Android Service总结

来源:互联网 发布:域名服务器所在地查询 编辑:程序博客网 时间:2024/05/21 09:56

参考文章

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

未完待续

原创粉丝点击