概述
在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方法