概述
在Activity绑定Service时,通过返回一个Binder子类的对象(该子类中定义了操作Service的方法)。
这样在Activity中,通过调用该对象的方法,实现对Service的控制。
操作步骤
步骤1、创建Service的一个子类,在该类中定义一个内部类,例如MyBinder,该类是Binder的子类。
步骤2、在内部类中定义若干操作Service的方法。
步骤3、在onBind方法中返回一个该内部类的对象。
步骤4、在Activity中绑定Service,在ServiceConnection的ServiceConnected方法中将第二个参数转换
为该Service的内部类的类型并赋值给一个对象。
步骤5、调用该对象中的方法操作实现对Service的操作。
示例
步骤1、以下是MyService类中关键代码:
public class MyService extends Service {
private String tag="MyService";
MyBinder mBinder;
public class MyBinder extends Binder{
public void print(String text){
MyService.this.print(text);
}
}
@Override
public IBinder onBind(Intent intent) {
Log.i(tag,"MyService onBind()");
return new MyBinder();
}
说明:
1、该类中定义了一个内部类:MyBinder,该类中定义了一个名为print的方法,
该方法调用了MyService类中的一个自定义的方法print。
2、在onBind方法中,创建并返回了一个Mbinder对象。
步骤2、以下是Activity中的关键代码:
MyService.MyBinder mBinder;
private ServiceConnection mConn=new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName name) {
}
//绑定成功时触发本方法
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
//获得MyService.bind()方法返回的对象(service)
mBinder=(MyService.MyBinder)service;
}
};
说明:当Activity与MyService绑定成功时,执行OnServiceConnected,并将onBind方法返回的对象传
递给service对象,则mBinder获得了onBind方法返回的对象。
步骤3、这是Activity中调用mBinder对象中方法的代码:
case R.id.btnBindService://绑定服务
intent.setClass(this, MyService.class);
bindService(intent, mConn, BIND_AUTO_CREATE);
mIsBind=true;
break;
case R.id.btnUnbindService://解除与服务的绑定
intent.setClass(this, MyService.class);
if(mIsBind){
mBinder.print("unBind");
unbindService(mConn);
mIsBind=false;
}
break;
说明:当解除绑定时,执行红框中的代码,调用mBinder.print方法