启动方式

  1. startService(Intent) 这种方式启动的Service可以在后台无限期的运行,与启动它的组件没有关系。
  2. bindService 绑定Service。它提供了一种类似C/S结构的接口,允许组件与Service进行交互,发送请求,获取结果,可以实现IPC跨进程操作。一个客户端组件绑定之后,Service开始运行;所有组件解绑之后,Service停止运行。

这两种方式可以同时存在于一个Service中。

服务在其托管进程的主线程中运行,它既 不创建 自己的线程,也 不会 在单独的进程中运行。可以通过Manifest文件对其运行的进程进行配置。

重要的回调方法

OnStartCommand()

startService() 之后调用的方法。一旦执行此方法,服务即会启动并在后台运行。可以使用stopSelf()或者stopService()方法终止Service。

onBind()

bindService()时,系统将调用此方法。此方法实现中必须返回一个IBinder接口的实例,用来给客户端与Service通信。如果不允许绑定,则应该返回null。

onCreate()

首次创建服务的时候调用此方法。如果服务已经运行,那不会调用此方法。

onDestroy()

服务正常销毁的时候调用此方法。

如果将服务绑定到焦点Activity那它不太可能会被终止;如果将服务声明为前台服务,那它几乎不会被终止。

扩展Service

Service

它是所有服务的基类。
onStartCommand()方法返回值必须是以下常量:

  1. START_NOT_STICKY Service在终止之后,不会自动重启。
  2. START_STICKY Service在终止之后,会自动重启。系统会调用Intent为null的onStartCommand来启动服务。如果有排队的Intent等待服务,那么他们会依次调用onStartCommand方法传递进来。
  3. START_REDELIVER_INTENT Service在终止之后,会自动启动。系统使用最后传进来的Intent,重新调用onStartCommand方法启动服务。
    这里的三个返回值只针对startService()启动的Service,对bindService()启动的Service无效。

IntentService

可以使用工作线程逐一处理所有启动请求。不要求服务同时处理多个请求的时候,它是个不错的选择。

扩展它的时候只需要实现onHandleIntent()方法就可以了。

终止Service

调用stopSelf()自行停止运行;另一个组件调用stopService()来停止它。一旦调用stopService(),系统会 尽快 停止它。

可以在stopSelf()的时候加一个Id。这个Id是onStartCommand()的时候传进来的Id。由于startService()可能被调用多次所以这个onStartCommand()传进来的Id有多个。如果stopSelf(Id)并不是当前的Id那什么都不发生。

绑定Service

客户端组件可以通过bindService()与一个服务绑定。要使服务能够绑定,必须重写onbind()方法来返回一个IBinder实例,用于定义与Service通信的接口。bindService()可以拿到该接口,并通过IBinder对象的实例调用服务的方法。如果没有按照startService()启动,并且没有组件绑定到Service,系统就会销毁该Service。

多个客户端可以同时绑定到同一个Service上。完成交互之后,可以调用unbindService()取消绑定。

前台运行服务

前台Service是一种用户可以感知的一种Service。所以,在内存不足的时候,系统也不会销毁它。前台服务必须提供状态栏的通知,状态栏中位于“正在进行”标题的下方。这意味着除非服务停止或者从前台删除,否则不能清除通知。
调用startForeground()即可将服务变为前台服务。它需要两个参数:1. 唯一标识的整数(不能为0) 2. Notification。
调用stopForeground()即可删除前台服务。一个参数: 是否删除标题栏通知。 这个方法是 不会停止服务的

如果一个前台进程自行终止(stopSelf/stopService),那么通知栏中的通知也会被删除。

Service生命周期

  1. 整个生命周期,从onCreate()方法开始,onDestroy()方法结束。onCreate方法做初始化,onDestroy方法销毁资源。
  2. 有效生命周期,从onStartCommand()/onBind()开始。每种方法都需要传递一个Intent参数。

startService()之后的生命周期与整个生命周期一致;bindService()之后剩下的生命周期到onUnbind()方法结束。

Android Service 基础的更多相关文章

  1. Android Service基础

    Service Service 是一个组件,用来执行长时间的后台操作,不提供用户界面. 另一个应用组件可以启动一个Service,它将持续地在后台运行,即便是用户转移到另一个应用它也不会停止. 另外, ...

  2. Android Service基础知识你知道多少?

    Android四大组件-Service 多次调用startService会怎样?会执行多次onCreate吗? StopService在哪里调用?stopSelf在哪调用? 怎样使Service被ki ...

  3. Service基础使用

    Service基础使用 之前的文章一直介绍Activity的使用,很多知识和用法单一的配合Activity使用,这次将总结Android四大组件之二--Service. 本文将要介绍以下内容: Ser ...

  4. Android Service完全解析,关于服务你所需知道的一切(下)

    转载请注册出处:http://blog.csdn.net/guolin_blog/article/details/9797169 在上一篇文章中,我们学习了Android Service相关的许多重要 ...

  5. AndroidApplication Fundamentals(Android应用基础)

    AndroidApplication Fundamentals(Android应用基础) Android应用采用Java编程语言来编写,AndroidSDK工具编译我们的代码,连同任何数据和资源文件一 ...

  6. 【Xamarin开发 Android 系列 7】 Android 结构基础(下)

    原文:[Xamarin开发 Android 系列 7] Android 结构基础(下) *******前期我们不打算进行太深入的东西,省的吓跑刚进门的,感觉门槛高,so,我们一开始就是跑马灯一样,向前 ...

  7. Android Service 详解

    一个Service也是一种应用程序组件,它运行在后台以提供某种服务,通常不具有可见的用户界面.其它的应用程序组件可以启动一个 Service,即使在用户切换到另外一个应用程序后,这个Service还是 ...

  8. android图形基础知识

    Android核心分析(23)-----Andoird GDI之基本原理及其总体框架 2010-06-13 22:49 18223人阅读 评论(18) 收藏 举报 AndroidGDI基本框架 在An ...

  9. 【转】Android Service完全解析,关于服务你所需知道的一切(下) ---- 不错

    原文网址:http://blog.csdn.net/guolin_blog/article/details/9797169 转载请注册出处:http://blog.csdn.net/guolin_bl ...

随机推荐

  1. shell脚本 字串截取 正则表达式

    字串处理 子串截取方法一:使用${}表达式格式:echo ${x:起始位置:长度}(起始位置编号从0开始,可省略) 方法二:使用expr substr格式:expr substr "$x&q ...

  2. 子沐代码段——Flask+Mysql+Echarts可视化

    前言 子沐不久前,使用Scrapy爬取了智联招聘的职位数据,并部署到服务器上,设置了定时任务.数据量日益庞大.子沐在想,数据不过只是存在数据库里,并没有什么意义,所以子沐萌发一个想法,那就是做一个可视 ...

  3. 在windows XP系统下编译和使用ffmpeg

    最近在做流媒体开发这一块,在服务器端,所用的live555不支持mp4,avi等视频容器格式,所以打算运用ffmpeg来进行扩展.将MP4文件先运用ffmpeg进行解析,解析成live555所支持的基 ...

  4. l【linux】linux rpm包命名规范

    RPM包的一般格式为:name-version-arch.rpmname-version-arch.src.rpm name:软件包名称.version:带有主.次和修订的软件包版本.arch:硬件平 ...

  5. windows 下安装或者卸载memcache

    1.安装到系统服务中: 在doc中:执行此软件 memcached.exe -d install(如果提示错误,要找到cmd.exe用管理员身份打开) 2.卸载: 在doc中:执行此软件 memcac ...

  6. linq查询集合并分页展示数据

    private void Bind() { if (Request.QueryString["QuestionNo"] != null) { string QuestionNo = ...

  7. pat1111-1120

    1111 比较麻烦的最短路 #include<cmath> #include<map> #include<iostream> #include<cstring ...

  8. Modbus总结

    1.概念 ①Coil和Register Modbus中定义的两种数据类型.Coil是位(bit)变量:Register是整型(Word,即16-bit)变量. ②Slave和Master与Server ...

  9. Luogu2973:[USACO10HOL]赶小猪

    题面 Luogu Sol 设\(f[i]\)表示炸弹到\(i\)不爆炸的期望 高斯消元即可 另外,题目中的概率\(p/q\)实际上为\(1-p/q\) 还有,谁能告诉我不加\(EPS\),为什么会输出 ...

  10. [BZOJ1051] [HAOI2006] 受欢迎的牛 (强联通分量)

    Description 每一头牛的愿望就是变成一头最受欢迎的牛.现在有N头牛,给你M对整数(A,B),表示牛A认为牛B受欢迎. 这 种关系是具有传递性的,如果A认为B受欢迎,B认为C受欢迎,那么牛A也 ...