Service服务

服务(Service)是Android中的四大组件之一,适用于开发无界面、长时间运行的应用功能,服务是在后台运行,服务的创建与Activity类似,只需要继承Service和在AndroidManifest.xml文件中注册即可,并且实现Service中的唯一一个方法onBind()。记住必须注册。

  1. 没有用户界面.
  2. 比Activity的优先级高,不会轻易被Android系统终止.
  3. 拥有独立的生命周期.

一、服务的生命周期

1、startService方式开启服务的生命周期(启动式的Service(大难临头各自飞))

服务的运行过程startService()-> onCreate()-> onStartCommond()-> Service running-> context.stopService()-> onDestroy()-> Service stop
  • 其他组件调用startService()方法时服务被创建,服务会先执行onCreate()方法,接着执行onStartCommand()方法开启服务,直到自身调用stopSelf()方法或者其他组件调用该方法时服务停止。
  • 通过调用startService()启动Service,通过调用stopService()或Service.stopSefl()停止Service。
  • 服务启动之后,访问者与Service之间没有关联,即使访问者退出了,Service仍然运行。
  • Service是由其他组件启动的,但停止过程可以通过其他组件或自身完成。

2、bindService方式开启服务周期(绑定式的Service(不求同生,但求共死))

服务的运行过程bindService()-> onCreate()-> onBind()-> Service running->unBindService()-> onUnbind()-> onDestroy()
  • 其他组件调用bindService()方法时服务被创建,通过unbindService()方法停止服务。
  • 通过bindService()方法启用Service,访问者与Service绑定在一起,访问者一旦退出,Service也就终止。
  • 通过服务链接(Connection)获取Service中的状态和数据信息。
  • 如果在绑定过程中Service未启动,Context.bindService会自动启动Service。
  • 可以被多个组件绑定,同时为多个组件服务,注意:数据的同步

3、Service生命周期方法

  • IBinder onBind(Intent intent):该方法是Service子类必须实现的方法。该方法返回一个IBinder对像,应用程序可以通过该对象与Service组件通信。
  • onCreate():服务第一次被创建后执行的方法。
  • onDestory():服务被销毁时执行的方法
  • onStartCommand():客户端通过startService(Intent service)显式启动服务时执行该方法。
  • onBind():客户端通过bindService(Intent,Service,int)启动服务时执行该方法。
  • onUnbind():客户端调用unBindService(ServiceConnection conn)断开服务绑定时执行的方法。

二、服务通信

服务通信有两种:一种是本地服务通信(应用程序内部的通信),一种是远程服务通信(两个应用程序之间的通信)。使用这两个通信必须以绑定方式启动。

1、本地服务通信

  • 使用本地服务通信首先要开发一个Service类,该类会提供一个 IBinder 的 onBind(Intent intent) 方法,onBind()方法会作为参数传递给ServiceConnection类中 onServiceConnected(ComponentNmae name,IBinder service)方法,这样访问者就可以通过IBinder对象与Service进行通信。

2、远程服务通信

  • Android的各个应用程序进程之间不能直接通信,要完成通信就需要使用远程服务通信。远程服务通信是通过AIDL(Android Interface Definition Language)实现的,它是一种接口定义语言,语法与Java中定义接口很相似,但是存在几点差异如下:

    1. AIDL 定义接口的源代码必须以.aidl结尾。
    2. AIDL 定义中用到的数据类型,除了基本数据类型、String、List、Map、CharSequence之外,其他类型全部都需要导入包,即使它们在同一个包中。
  • 开发人员定义的AIDL接口只是定义了进程之间的通信接口,服务端、客户端都需要使用Android SDK 安装目录下的platform-tools子目录下的aidl.exe工具为该接口提供实现。
  • 注意:AIDL没有修饰符,写法为:interface IService{}。

Android 服务_笔记的更多相关文章

  1. Android 线程_笔记

    多线程 一.为什么要使用多线程 1.提高用户体验或避免ANR 在事件处理代码中需要使用多线程,响应时间超过5s,即会出现ANR(Application is not responding),并因为响应 ...

  2. Android群英传笔记——第九章:Android系统信息和安全机制

    Android群英传笔记--第九章:Android系统信息和安全机制 本书也正式的进入尾声了,在android的世界了,不同的软件,硬件信息就像一个国家的经济水平,军事水平,不同的配置参数,代表着一个 ...

  3. Android 服务类Service 的详细学习

    http://blog.csdn.net/vipzjyno1/article/details/26004831 Android服务类Service学习四大组建   目录(?)[+] 什么是服务 服务有 ...

  4. Android群英传笔记——第十章:Android性能优化

    Android群英传笔记--第十章:Android性能优化 随着Android应用增多,功能越来越复杂,布局也越来越丰富了,而这些也成为了阻碍一个应用流畅运行,因此,对复杂的功能进行性能优化是创造高质 ...

  5. Android群英传笔记——摘要,概述,新的出发点,温故而知新,可以为师矣!

    Android群英传笔记--摘要,概述,新的出发点,温故而知新,可以为师矣! 当工作的越久,就越感到力不从心了,基础和理解才是最重要的,所以买了两本书,医生的<Android群英传>和主席 ...

  6. erlang-百度云推送Android服务端功能实现-erlang

    百度云推送官方地址http://developer.baidu.com/wiki/index.php?title=docs/cplat/push 简单的介绍下原理: 百度云推送支持IOS和Androi ...

  7. Android:日常学习笔记(5)——探究活动(2)

    Android:日常学习笔记(5)——探究活动(2) 使用Intent在活动之间穿梭 什么是Intent Intent时Android程序中各组件之间进行交互的一种重要方式,他不仅可以指明当前组件想要 ...

  8. Android:日常学习笔记(2)——分析第一个Android应用程序

    Android:日常学习笔记(2)——分析第一个Android应用程序 Android项目结构 整体目录结构分析 说明: 除了APP目录外,其他目录都是自动生成的.APP目录的下的内容才是我们的工作重 ...

  9. Android 服务入门

    前言:硬着头皮把数据库SQLite看完了,接下来就是android服务了,因为自己本身就是菜鸟,所以呢,也只是做做笔记,技术上的东西就别指望我了. 1.什么是服务呢?举个例子,百度地图,美团外卖,OF ...

随机推荐

  1. mysql优化专题」90%程序员都会忽略的增删改优化(2)

    补充知识点:操作数据语句优化的认识 通常情况下,当访问某张表的时候,读取者首先必须获取该表的锁,如果有写入操作到达,那么写入者一直等待读取者完成操作(查询开始之后就不能中断,因此允许读取者完成操作). ...

  2. jsp中EL表达式不起作用的问题1

    问题:在jsp页面中使用el表达式取值,取不到值,但是使用jsp中嵌套java代码可以取到值,对应代码如下: 解决: 只要在 jsp中 头文件中写上 : <%@page isELIgnored= ...

  3. Git使用简单总结

    创建版本库git add加入到暂存区git commit -m" "加入到分支 时光机穿梭git satus查看仓库的当前状态git diff file 查看修改内容 版本回退HE ...

  4. 【java】实现Interface java.lang.Comparable<T>接口的int compareTo(T o)方法实现对象数组或链表或集合的排序,和挽救式对象比较器Interface java.util.Comparator<T>

    package 对象比较排序; import java.util.Arrays; class A implements Comparable<A>{ private String name ...

  5. Nginx的 HTTP 499 状态码处理

    1.前言 今天在处理一个客户问题,遇到Nginx access log中出现大量的499状态码.实际场景是:客户的域名通过cname解析到我们的Nginx反向代理集群上来,客户的Web服务是由一个负载 ...

  6. xamarin android menu的用法

    在Android中的菜单有如下几种: OptionMenu:选项菜单,android中最常见的菜单,通过Menu键来调用 SubMenu:子菜单,android中点击子菜单将弹出一个显示子菜单项的悬浮 ...

  7. 串口调试者v2.1------开源c#串口调试工具

    第一步:上图 第二步:上代码 >>>>>>>>>>>源代码下载<<<<<<<<< ...

  8. unity -- Time类(持续更新中)

    2018年了,新年总是会制定很多具体目标和计划,不管能否坚持去完成,初衷和决心总是要有的.本年第一篇博客终于开始下笔了,先立一些今年和公司业务无关的的flag: 1.希望每月或两月能看一套蛮牛游戏上的 ...

  9. 7、正确的赚钱方式 - CEO之公司管理经验谈

    创业者创办公司,最初的目的就是为了赚钱,而普通的员工来公司上班,为了生计,也是以赚钱为目的.今天我们就讲讲正确的赚钱方式. 一.去公司上班: 来公司上班是第一个主要的赚钱方式.不管是员工还是公司领导, ...

  10. Xamarin~Android篇~监听返回键,单击返回某个webView,双击退出

    https://www.cnblogs.com/lori/p/5088627.html DateTime? lastBackKeyDownTime; public override bool OnKe ...