启动方式

  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. alsa声卡分析alsa-utils调用过程

    如何分析tinyplay 播放音频和tinymix的过程?需要相应的工具来支持追查: 一.利用strace工具分析tinyplay和tinymix: strace -o tinyplay.log ti ...

  2. Linux显示目前与过去登入系统的用户相关信息

    Linux显示目前与过去登入系统的用户相关信息 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ last youhaido pts/0 :0 Sat Jan 2 ...

  3. 芝麻HTTP:

    只要你的Scrapy Field字段名字和 数据库字段的名字 一样.那么恭喜你你就可以拷贝这段SQL拼接脚本.进行MySQL入库处理. 具体拼接代码如下: def process_item(self, ...

  4. Python中ValueError: invalid literal for int() with base 10 的实用解决办法

    爬虫代理IP由芝麻HTTP服务供应商提供今天在写爬虫程序的时候由于要翻页,做除法分页的时候出现了 totalCount = ' totalPage = int(totalCount)/20 Value ...

  5. POJ 2104 K-th Number 主席树

    #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> us ...

  6. BUAA软工第0次作业

    第一部分:结缘计算机 1.你为什么选择计算机专业?你认为你的条件如何?和这些博主比呢?(必答) 我在大学之前甚至连一个萌新都算不上,根本没有任何一点计算机专业的基础. 因此在进入大学之前,计算机对于我 ...

  7. input输入框

    7.1,置灰和input框去除置灰 $("#key_SettlementCycle").attr("disabled","disabled" ...

  8. java将字符串转换为指定的时间格式

    *String dateString = "18:31:43";    try {     Date date = new SimpleDateFormat("HH:mm ...

  9. 过滤器(Filter)和拦截器(Interceptor)

    之前总是弄混这两者,今天看了几篇文章,小结一下在这里. Filter介绍 Filter可以认为是Servlet的一种"加强版",它主要用于对用户请求进行预处理,也可以对HttpSe ...

  10. Hive 编程之DDL、DML、UDF、Select总结

    Hive的基本理论与安装可参看作者上一篇博文<Apache Hive 基本理论与安装指南>. 一.Hive命令行 所有的hive命令都可以通过hive命令行去执行,hive命令行中仍有许多 ...