Service 详解

转载 2015年11月20日 15:48:36

按运行地点分类:

类别 区别 优点 缺点 应用
本地服务(Local) 该服务依附在主进程上, 服务依附在主进程上而不是独立的进程,这样在一定程度上节约了资源,另外Local服务因为是在同一进程因此不需要IPC,也不需要AIDL。相应bindService会方便很多。 主进程被Kill后,服务便会终止。 非常常见的应用如:HTC的音乐播放服务,天天动听音乐播放服务。
远程服务(Remote) 该服务是独立的进程, 服务为独立的进程,对应进程名格式为所在包名加上你指定的android:process字符串。由于是独立的进程,因此在Activity所在进程被Kill的时候,该服务依然在运行,不受其他进程影响,有利于为多个进程提供服务具有较高的灵活性。 该服务是独立的进程,会占用一定资源,并且使用AIDL进行IPC稍微麻烦一点。 一些提供系统服务的Service,这种Service是常驻的。

其实remote服务还是很少见的,并且一般都是系统服务。

按运行类型分类:

类别 区别 应用
前台服务 会在通知一栏显示 ONGOING 的 Notification, 当服务被终止的时候,通知一栏的 Notification 也会消失,这样对于用户有一定的通知作用。常见的如音乐播放服务。
后台服务 默认的服务即为后台服务,即不会在通知一栏显示 ONGOING 的 Notification。 当服务被终止的时候,用户是看不到效果的。某些不需要运行或终止提示的服务,如天气更新,日期同步,邮件同步等。

按使用方式分类:

类别 区别
startService 启动的服务 主要用于启动一个服务执行后台任务,不进行通信。停止服务使用stopService
bindService 启动的服务 该方法启动的服务要进行通信。停止服务使用unbindService
startService 同时也 bindService 启动的服务 停止服务应同时使用stepService与unbindService

以上面三种方式启动的服务其生命周期也有区别,将在随后给出。

同时使用 startService 与 bindService 要注意到,Service 的终止,需要unbindService与stopService同时调用,才能终止 Service,不管 startService 与 bindService 的调用顺序

在 sdk 2.0 及其以后的版本中,对应的 onStart 已经被否决变为了 onStartCommand,不过之前的 onStart 任然有效。这意味着,如果你开发的应用程序用的 sdk 为 2.0 及其以后的版本,那么你应当使用 onStartCommand 而不是 onStart

在什么情况下使用 startService 或 bindService 或 同时使用startService 和 bindService

  • 如果你只是想要启动一个后台服务长期进行某项任务那么使用 startService 便可以了。

  • 如果你想要与正在运行的 Service 取得联系
方式 区别
broadcast 如果交流较为频繁,容易造成性能上的问题,并且 BroadcastReceiver 本身执行代码的时间是很短的(也许执行到一半,后面的代码便不会执行)
bindService 没有这些问题,因此我们肯定选择使用 bindService(这个时候你便同时在使用 startService 和 bindService 了,这在 Activity 中更新 Service 的某些运行状态是相当有用的)
  • 另外如果你的服务只是公开一个远程接口,供连接上的客服端(android 的 Service 是C/S架构)远程调用执行方法。
  • 这个时候你可以不让服务一开始就运行,而只用 bindService ,这样在第一次 bindService 的时候才会创建服务的实例运行它,这会节约很多系统资源,特别是如果你的服务是Remote Service,那么该效果会越明显(当然在 Service 创建的时候会花去一定时间,你应当注意到这点)



引用blog:
[链接]http://www.cnblogs.com/newcj/archive/2011/05/30/2061370.html

相关文章推荐

android各组件详解- Service

  • 2013年05月07日 18:12
  • 335KB
  • 下载

Android服务Service_详解文档

  • 2014年01月18日 10:07
  • 77KB
  • 下载

aidl详解:同一APK内,不同apk间的activty与service通信

1.什么是aidl:aidl是 Android Interface definition language的缩写,一看就明白,它是一种android内部进程通信接口的描述语言,通过它我们可以定义进程间...

Android Service 详解

  • 2013年10月04日 19:23
  • 318KB
  • 下载

android Service 详解

  • 2012年05月22日 13:14
  • 952KB
  • 下载

整合Spring时Service层为什么不做全局包扫描详解

整合Spring时Service层为什么不做全局包扫描详解一、Spring和SpringMVC的父子容器关系 1.讲问题之前要先明白一个关系 一般来说,我们在整合Spring和SpringMVC这...

Service与BInder、aidl详解

  • 2014年12月23日 11:25
  • 18KB
  • 下载

Web service 开发详解

  • 2014年04月17日 14:21
  • 7.22MB
  • 下载

Service.onStartCommand() 返回值详解

温故而知新,最新在复习的时候,突然发现又学到了不少东西。我们开启一个服务的时候,会调用onStartCommand()方法。 onStartCommand源码:private boolean mSt...

Android Service详解

  • 2012年11月08日 17:20
  • 121KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Service 详解
举报原因:
原因补充:

(最多只允许输入30个字)