Service是android四大组件之一,它与Activity非常类似,最大的区别就是Activity在前台运行,主要作用于界面的交互,而Service是在后台运行的一个服务,它没有界面。
Service的创建步骤:
(1)定义一个继承Service的子类;
(2)在AndroidManifest.xml文件中配置该Service。
与activity类似,Service也有自己的生命周期方法,具体如下:
abstract IBinder onBind(Intent intent):该方法是重写Service必须实现的一个方法,方法中返回一个Binder对象,我们可以通过该Binder对象与Service进行通信。
void onCreate ():当Service第一次被创建成功后,将会回调该方法,主要做一些初始化操作。
void onDestroy():当Service被关闭之前会调用改方法,主要做一些Service的清理与保存工作。
void onStartCommand():每次客户端调用startService(Intent)后方法启动Service时,Service都会回调改方法进行相关操作。
boolean onUnbind():当绑定改Service上的所有客户端全都断开连接时,将会调用改回回调方法。
下面举例子介绍一下Service组件的简单应用
1、Service的创建、配置、启动与停止
MyService类:这个类只是重写了一些方法,并打印一些log,为了清楚说明Service启动时的方法回调
<span style="font-family:FangSong_GB2312;font-size:18px;">import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;
public class MyService extends Service{
private String TAG = "MyService";
//必须实现,返回IBinder对象,用于与Service组件进行通信,此处返回null,具体后面详细介绍
@Override
public IBinder onBind(Intent intent) {
return null;
}
//Service被创建时回调的方法
@Override
public void onCreate(){
Log.i(TAG, "创建Service调用onCreate()");
}
//Service被启动时回调的方法
@Override
public int onStartCommand(Intent intent, int flags, int startId){
Log.i(TAG, "启动Service调用onStartCommand");
/*
* 这里返回状态有三个值,分别是:
* 1、START_STICKY:当服务进程在运行时被杀死,系统将会把它置为started状态,但是不保存其传递的Intent对象,之后,系统会尝试重新创建服务;
* 2、START_NOT_STICKY:当服务进程在运行时被杀死,并且没有新的Intent对象传递过来的话,系统将会把它置为started状态,
* 但是系统不会重新创建服务,直到startService(Intent intent)方法再次被调用;
* 3、START_REDELIVER_INTENT:当服务进程在运行时被杀死,它将会在隔一段时间后自动创建,并且最后一个传递的Intent对象将会再次传递过来。
*/
return START_STICKY;
}
//Service销毁时回调的方法
@Override
public void onDestroy(){
super.onDestroy();
Log.i(TAG, "销毁Service调用onDestroy()");
}
}</span>
定义了Service之后需要在AndroidManifest.xml文件中配置该Service,即在AndroidManifest.xml文件中application标签内增加如下的配置片段来配置service:
<span style="font-family:FangSong_GB2312;font-size:18px;"><!-- 配置一个service组件 -->
<service android:name=".MyService">
<intent-filter>
<!-- 为该组件的intent-filter配置action -->
<action android:name="com.example.MY_SERVER&