1、创建一个Service
创建一个Service类比较简单,只要定义一个类继承Service,覆盖该类中相应的方法就可以了。Service中定义了一系列和自身声明周期相关的方法,这些方法有:
- onBind(Intent intent):是必须实现的一个方法,返回一个绑定的接口给Service。
- onCreate():当Service第一次被创建时,有系统调用。
- onStart(Intent intent, int startId):当通过startService()方法启动Service时,该方法被调用。
- onDestroy():当Service不再使用,系统调用该方法。
下面的代码演示了如何创建一个Service。
public class MyService extends Service {
// 可以返回null,通常返回一个有aidl定义的接口
@Override
public IBinder onBind(Intent intent) {
return null;
}
// Service创建时调用
@Override
public void onCreate() {
super.onCreate();
}
// 当客户端调用startService()方法启动Service时,该方法被调用
@Override
public void onStart(Intent intent, int startId) {
super.onStart(intent, startId);
}
// 当Service不再使用时调用
@Override
public void onDestroy() {
super.onDestroy();
}
}
要想使用该Service必须在AndroidManif.xml配置文件中使用<service>元素声明该Service。在<service>元素中添加<intent-filter>指定如何访问该Service。
<service android:name="MyService">
<intent-filter>
<action android:name="com.amaker.ch08.app.action.MY_SERVICE" />
</intent-filter>
</service>
2、启动和停止Service
一旦定义好一个Service就可以在其他组件中启动该Service来使用它了。启动一个Service使用Context.startService(Intent intent)方法,你会发现这和启动一个Activity非常相似,也是传递一个Intent。当我们调用startService()方法时,被调用的Service会调用它的onCreate()方法(如果该Service还未创建),接着调用onStart()方法。一旦Service启动后将一直运行直到调用了Context.stopService()或者stopSelf()。下面的代码演示了如何启动和停止一个Service。
// 创建Intent
Intent intent = new Intent();
// 设置Action属性
intent.setAction("com.amaker.ch08.app.action.MY_SERVICE");
// 启动该Service
startService(intent);
// 停止一个Service
stopService(intent);
3、绑定一个已经存在的Service
我们可以调用startService()方法来启动一个Service方法,也可以通过bindService()方法来绑定一个Service。和调用startService()方法一样,Service会调用onCreate()方法来创建Service(如果它未创建),但是它不会调用onStart()方法而是调用onBind()返回客户端一个IBinder接口。绑定Service一般是用在远程Service调用。有关这个话题的详细内容下面将详细介绍。
绑定Service需要三个参数:bindService(intent, conn, Service.BIND_AUTO_CREATE);第一个是Intent;第二个是ServiceConnection对象,我们创建该对象实现其onServiceConnected()和onServiceDisconnected()来判断连接成功或者断开连接;第三个参数是如何创建Service,一般指定绑定时自动创建。
// 连接对象
ServiceConnection conn = new ServiceConnection() {
// 连接时调用
public void onServiceConnected(ComponentName name, IBinder service) {
Log.i("SERVICE", "连接成功!");
}
// 断开时调用
public void onServiceDisconnected(ComponentName arg0) {
Log.i("SERVICE", "断开连接!");
}
};
// 绑定Service
bindService(intent, conn, Service.BIND_AUTO_CREATE);