綁定Service的三種實現方式之使用AIDL

來源:互聯網
上載者:User

AIDL全稱為Android Interface Definition Language,它可以使你的程式實現處理序間通訊(IPC),並且在實現IPC的基礎上允許多線程訪問。

首先,我們要建立一個自己的.aidl檔案(見Demo中的IRemoteService.aidl)。

定義AIDL檔案與java中建立介面非常的類似。一般來說,aidl支援的資料類型有五種:java基礎資料型別 (Elementary Data Type);String;CharSequence;List;Map。其中List和Map較為特殊(http://developer.android.com/guide/components/aidl.html#Create)。如果你使用的資料類型不是AIDL的基礎資料型別 (Elementary Data Type),你必須要使用import語句將其匯入,即使他們是在同一個package下。聲明方法時,方法的參數可以零到多個,傳回值可以是void;所有的非基礎資料型別 (Elementary Data Type)都需要指定是傳入還是傳出值(基礎資料型別 (Elementary Data Type)都是傳入值;在AIDL檔案中不能聲明靜態欄位)

其次,我們要實現我們上面剛剛建立的介面(見Demo中StudentService中的mBinder)。

假設我們有一個AIDL檔案叫IRemoteService.aidl,當我們編譯我們的項目的時候,android的ant能將我們的AIDL檔案產生為java檔案(放在gen/下面)。這個java檔案中有一個抽象內部類Stub(繼承了Binder類)實現了我們的介面,並提供了一個asInterface方法將IBinder對象轉化為我們的介面類型。因為實現我們的介面就轉化為實現其抽象內部類Stub(Service端的業務函數全部在這裡實現)。

再次,將我們的介面暴露給用戶端(注意Demo在Server端AndroidManifest.xml中對StudentService的聲明)

將我們的介面暴露給用戶端實際上就是:在Service的onBind函數中將我們的Stub類的執行個體反出去。

這樣,Service端的工作就完成了!

那麼,怎樣通過IPC傳遞對象呢(見Demo中的Student.java和Student.aidl)?

如果你想在進程間傳遞對象,那麼對象就必須實現Parcelable介面。而實現這個介面需要我們完成以下幾步:

1、在聲明對象的時候實現Parcelable介面

2、實現writeToPacel方法

3、添加一個叫做CREATOR的靜態變數(這個變數要實現Parcelable.Creator介面)

4、建立一個AIDL檔案來聲明這個實現了Parcelable介面的類

這樣我們就可以在AIDL中使用對象了。

用戶端怎麼對Service端的方法進行調用呢?

其實很簡單,只需要一下幾步就可以了(見Demo中的Client中的代碼)。

1、將Server端使用的.aidl檔案拷貝到client程式中,如果你的aidl檔案僅僅是對實現了Parcelable介面的類的說明,那麼,對應的java檔案也要拷貝過去。(注意包名,具體可參考Demo的client端對Sever端AIDL檔案的匯入)

2、編譯client程式,將在gen/目錄下產生AIDL對應的的類檔案

3、實現ServiceConnection介面。在onServiceConnected方法中,使用AIDL產生的Java檔案的函數(內部類Stub的asInterface)將onServiceConnected函數的中IBinder參數轉化為AIDL產生的介面對象。

4、根據第3步得到的對象來調用AIDL中的函數。

5、調用bindService函數執行綁定操作(解除綁定使用unbindService函數)

到這裡,AIDL的使用講解就結束了。推薦你結合本文的Demo來讀這篇文章,相信會讓你受益匪淺的。

Demo連結:http://pan.baidu.com/share/link?shareid=587849&uk=2953765628

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.