1、第八章 服务服务的创建服务的生命周期服务的启动方式服务通信 学习目标重点了解掌握2服务的生命周期3服务的启动方式服务的创建 服务通信1 目录服务的创建8.18.1服务的生命周期 8.28.2服务的启动方式8.38.3点击查看本小节知识架构服务通信8.48.4点击查看本小节知识架构本章小结 8.58.5 知识架构8.3.1start方式启动服务bind方式启动服务8.3.28.3 服务的启动方式返回目录 知识架构8.4 服务通信返回目录8.4.1本地服务通信和远程服务通信案例音乐播放器8.4.2案例远程调用支付宝8.4.3什么是服务?什么是服务?8.1 服务的创建服务(Service)是Andr
2、oid中的四大组件之一,它能够长期在后台运行且不提供用户界面。即使用户切到另一应用程序,服务仍可以在后台运行。 8.1 服务的创建8.1 服务的创建 服务的创建方式与创建Activity类似,只需要继承Service类,然后在清单文件中注册即可。 1、创建服务、创建服务public class MyService extends Service public IBinder onBind(Intent arg0) return null; 2、在清单文件中配置、在清单文件中配置 8.2 服务的生命周期 与其他组件不同的是,Service不能自己主动运行,需要调用相应的方法来启动。 启动服务的方
3、法是Context.startService()和Context.bindService()。使用不同的方法启动服务,服务的生命周期也会不同。 8.2 服务的生命周期 1、startService方式开启服务的生命周期方式开启服务的生命周期 服务会执行onCreate() onStartCommand()方法,服务处于运行状态,直到自身调用stopSelf()方法或者其他组件调用stopService()方法时服务停止,最终被系统销毁。 服务会长期长期的在后台后台运行运行,并且服务的状态与开启者的状态没有关系。 2、bindService方式开启服务的生命周期方式开启服务的生命周期服务会执行o
4、nCreate() onBind()方法,服务处于绑定状态, 客户端通过unbindService()方法关闭连接,解除绑定时,系统将直接销毁服务。 服务与开启者的状态有关与开启者的状态有关,当调用者销毁了,服务也会被销毁。8.3 服务的启动方式 8.3.1 start方式启动服务方式启动服务 使用startService()方式开启服务的具体代码如下所示: Intent intent = new Intent(this, StartService.class); Context.startService(intent); Context.stopService(intent); 服务也是An
5、droid中的四大组件之一,因此需要在清单文件中注册 当程序使用startService()和stopService()启动、关闭服务时,服务与调用者之间基本不存在太多的关联,也无法与访问者进行通信、数据交互等。如果服务需要与调用者进行方法调用和数据交互数据交互时,应该使用bindService()和unbindService()启动、关闭服务。 bindService(Intent service,ServiceConnection conn, int flags) Intent对象用于指定要启动的Service ServiceConnection对象用于监听调用者与Service的连接状态
6、。 flags指定绑定时是否自动创建Service(如果Service还未创建)。 8.3 服务的启动方式 8.3.2 bind方式启动服务方式启动服务 8.4.1 本地服务通信和远程服务通信本地服务通信和远程服务通信。 在Android系统中,服务的通信方式通信方式有两种,一种是本地本地服务通信,一种是远程远程服务通信。 本地服务通信是指应用程序内部的通信,而远程服务通信是指两个应用程序之间的通信。使用这两种方式进行通信时必须满足一个前提,就是服务必须以绑定方式开启绑定方式开启。 8.4 服务通信 8.4.1 本地服务通信和远程服务通信本地服务通信和远程服务通信。 1、本地服务通信、本地服务
7、通信 在进行本地服务通信时,可以使用Service类提供的IBinder onBind(Intent intent)方法,该方法返回的IBinder对象会作为参数传递给ServiceConnection类中onServiceConnected(ComponentName name,IBinder service)方法,这样访问者就可以通过IBinder对象与Service进行通信。 8.4 服务通信 8.4.1 本地服务通信和远程服务通信本地服务通信和远程服务通信。 2、远程服务通信、远程服务通信 远程服务通信是通过AIDL(Android Interface Definition Langu
8、age)实现的,它是一种接口定义语言(Interface Definition Language),其语法格式非常简单,与Java中定义接口很相似。 package cn.itcast.service;interface IService String getName(); int getPrice(); 定义好AIDL接口之后,接着需要在应用程序中创建Service的子类。该Service的onBind()方法所返回的IBinder对象应该是ADT所生成的IService.Stub的子类。8.4 服务通信 8.4.2 案例案例音乐播放器音乐播放器。8.4 服务通信 在生活中经常会用到服务,为了让大家更好的理解服务通信,接下来通过一个音乐播放器的案例来演示如何使用服务进行通信。 8.4.3 案例案例远程调用支付宝远程调用支付宝。8.4 服务通信 在日常生活中,经常会用到支付宝,例如使用支付宝购买游戏中的付费道具。其中,点击打开支付宝付费的过程就使用了远程服务。接下来通过模拟调用支付宝的案例来对远程服务的绑定与使用进行讲解。8.5 本章小结本章主要讲解了Android中的服务,首先讲解了如何创建服务、服务的生命周期,然后讲解了服务的两种开启模式,最后讲解了使用服务在程序中进行通信,并通过调用支付宝的案例演示了服务在不同程序见的通信。