使用綁定控制Service

概述

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

發佈了309 篇原創文章 · 獲贊 144 · 訪問量 139萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章