除了上一篇文章我們提到的通過service提供音樂播放等類似的服務之外,我們還可以通過service將對象傳遞回來哦,你知道怎麼用嗎,先看例子:
當我們點擊“獲取”時,會從另一個線程的service中獲取一個對象,然後將裏面的內容讀出來。
--------------------------------------------------------------------------------------------
對於aidl實現以對象的方式交互。主要步驟如下:
服務端:
第一:定義一個實體類,這裏是Beauty,定義一個服務接口aidl文件RemoteBeauty.aidl,這裏有一點需要注意,我們引用自定義的實體類到aidl中時需要通過import導入包,但是你會發現,即使你導入了包,還是提示找不到,這時候,你要做的是,建一個以實體類名稱命名的aidl文件,如Beauty.aidl,在裏面添加一句pracelable Beauty。
第二:開始編寫Beauty,這裏一定要注意,它一定要實現Pracelable接口,該接口是一個序列化的接口,功能和serializable相似,但是功能更加的迅速。此外,在該Beauty內部一定要聲明一個public static final Pracelable.Creator<T>CREATOR對象!!除了裏面的那個T代表實體類之外,其他的都不準改變哦。
第三:在androidManifest.xml中註冊service。並定義好訪問該service的action字符串。
客戶端:
客戶端這邊相應的要簡單很多,但是要注意的一點是,要將實體類還有aidl文件都拷貝過來哦,而且要保證路徑完全一致!!
-------------------------------------------------------------
代碼示例:
服務端:
Beauty.java
RemoteService.java
ServiceActivity.java
Beauty.aidl
RemoteBeauty.aidl
manifest.xml
-------------------------------------
客戶端:
ClientActivity.java
另外Beauty.java 以及RemoteBeauty.aidl都是從服務端系統中拷貝過來的哦。
如果你想你的service在系統開機時自啓動。可以在service的androidManifest.xml中加上這樣的配置。
<receiver android:name=".StartBroadcastReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>