Inter Process Communication,IPC(进程间通信,吼吼。),它可以用于解决两个不同Android应用程序进程之间的调用和通信问题。

Service生命周期

 

调用startService()启动Service --> onCreate() --> onStart() --> Service正在运行-->Sercice被停止-->onDestroy()--> 关闭Service

 

 

 

 

使用方式有两种

1.启动方式(不能获取Service对象,无法调用Service中的方法)

1.1Context.startService()启动Servide

1.2Context.stopService()终止ServiceService.stopSefl()停止Service

1.31.2中的终止并未真正终止,除非它所在的Activity调用onDestroy()才算真正终止

2.绑定方式(能获取Service对象,可以调用Service中的方法,通过Connection实现)

          2.1Context.bindService()建立服务链接

2.2Context.unbindService()终止链接

最主要的是:同一个Service可以绑定多个服务链接,这样可以同时为多个不同的组件提供服务

 

例:播放MP3暂停

Context.startService();启动服务

Context.bindService();获取Service对象保存播放信息,再用:暂停函数暂停播放

需要注意的是:在此情况下如何调用Context.stopService()终止播放的话并不能停止Service,需要在所有的服务链接关闭后,Service才能真正停止

 

Intent广播消息时候要有一个唯一标识,此处,Service在全局文件中注册时也要一个唯一标识

<service android:name=".继承Service的类名">

代码实现Service后有两种方式启动服务:显式启动和隐式启动

1.显式启动:

final Intent serviceIntent = new Intent(this,继承Service的类名.class);

startService(serviceIntent);

 

2.隐式启动:

final Intent serviceIntent = new Intent();

serviceIntent.setAction("继承Service的类_完整路径");

 

<service android:name=".继承Service的类名">

<intent-filter>

<action android:name="继承Service的类_完整路径"/>

</intent-filter>

</service>

无论何种方式 :关闭方式都一样的:stopService(serviceIntent);……………….吼吼

 

 

 

 

 

bindService:

创建一个能提供绑定服务的功能时,必须提供一个IBinder对象,吼吼,客户端能用这个对象与服务交互,定义方式有三种:

1.扩展Binder

1.1:Service类中,创建一个Binder实例,包含客户端使用的公共方法,返回当前服务对象

1.2:onBinder()方法中返回Binder实例

1.3:在客户端,从onServiceConnected()方法中取得Binder实例

 

2.使用Message

3.使用AIDLAndroid Interface Definitation Language

 

 

服务启动之后是运行在主线程之中的,输入日志中可以直接取线程信息:(Log.i(TAG”,Thread.getCurrentThread.getId());

 

 

Service里面处理比较耗时的事件用多线程即可解决的,但在Android中系统提供了一个IntentService来专门处理异步请求,客户通过调用startService(Intent )方法传递请求给IntentService,IntentService再通过 worker Thread来处理每个Intent对象,执行完以后会自动停止此Service…..吼吼。。有队列使用哦

步骤如下:

1.写构造方法

2.复写onHandleIntent()方法。