Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 初級開發 >> Android AIDL全攻略二 - Service綁定

Android AIDL全攻略二 - Service綁定

編輯:初級開發

上次我們在 android AIDL全攻略一 中講到了AIDL的概念,由於AIDL屬於服務相關內容,同時需要涉及到Service綁定問題,作為整個Android AIDL系列教程的第二節我們一起來看下Service綁定問題。我們過去使用一些輕量級的服務可能直接startService啟動,通過Service中的onStart方法可以獲取執行服務的命令行,其中參數Intent可以傳遞內容,當然作為低頻度的傳輸也可以考慮Broadcast來交互Activity和Service,但是作為正常專業的長久的服務android123還是推薦大家使用綁定機制來實現數據的傳輸。其中系統級別的跨進程服務AIDL就是基於Service綁定方式的。

  作為Service必須重寫一個方法就是onBind(),如果使用startService方式啟動服務,則我們在onBind()中返回一個null的IBinder對象。今天使用bindService方法將如何寫呢? 具體的步驟如下:

  1. 使用bindService方法啟動服務,bindService (Intent service, ServiceConnection conn, int flags) 有三個參數,這裡大家可能會對第二個ServiceConnection和最後第三個參數的標識感到陌生,一般在我們調用bindService時需要一個ServiceConnection獲取服務實例以及狀態,代碼如下

  private ServiceConnection sc = new ServiceConnection() {
     @Override
  public void onServiceConnected(ComponentName name, IBinder service) {
      Toast.makeText(ctx, "android123 service connected", Toast.LENGTH_LONG).show();
  }
  @Override
  public void onServiceDisconnected(ComponentName name) {
      Toast.makeText(ctx, "android123 service disconnected", Toast.LENGTH_LONG).show();
  }
 };

 這樣,我們在服務的連接和斷開時都會收到一個Toast的消息提示,而bindService最後的參數一般使用BIND_AUTO_CREATE 標識自動創建。所以一般我們綁定一個服務,使用下面的代碼

  bindService(intent, sc, Service.BIND_AUTO_CREATE);

 來啟動服務,而解除綁定可以用  unbindService(sc);

 2. 上面說的都是在非具體的Service中進行操作,下面來看看Service需要處理哪些內容:

 public boolean onUnbind (Intent intent) //反綁定服務時做清理工作

 public void onRebind (Intent intent)  //重新綁定時觸發

 public abstract IBinder onBind (Intent intent)  //我們需要返回一個IBinder對象,所以要實現這個抽象方法

 3. 實現onBind方法,這裡我們簡單的給服務的調用者傳遞一個Service的實例

  public class cwjBinder extends Binder{

  cwJService fetchService()
  {
   return cwJService.this;
  }

}

 我們在構造Service時實例化cwjBinder使用

  cwjBinder binderObj=new cwjBinder();

  這時我們在onBind()的返回時設置為binderObj而不是null了。

 4. 回到我們調用Service的地方,在ServiceConnection中的  onServiceConnected 方法第二個參數就是我們剛才的IBinder實例了, 該方法原型為  public void onServiceConnected(ComponentName name, IBinder service) ,這時我們可以調用 fetchService方法了。有關Android AIDL的另一注意點android開發網將在明天講解。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved