3.使用Messenger ---->用於可存放在message中的數據的傳遞java
4.AIDL android 接口定義語言 ---->主要用於調用遠程服務的方法的狀況 還能夠註冊接口 android
本文大體說一下第四種方式 AIDL,廢話很少說了,直接上代碼git
先看一下host的目錄結構:github
IMyAidlInterface.aidl 是默認新建的AIDL文件,以後我會在裏面增長部分代碼,新建AIDL文件方法以下(切記,新建aidl文件後記得make project一下,as會給咱們默認生成不少aidl對應的java代碼!):數據結構
咱們打開IMyAidlInterfacegradle
咱們就以上代碼稍做簡介:spa
1.basciTypes 是建立aidl默認的生成的代碼, 展現給咱們一些默認支持的數據類型線程
2.getName() 返回一個默認支持類型 String,不須要作額外處理3d
3.getPerson() 自定義返回類型blog
若是咱們返回一個基礎類型,不須要作額外的處理,建立目錄結構中的 MyService, 重構其中的方法,getName直接返回一個簡單的String
最後在mainfest 添加service的相關配置:
而後咱們新建 client項目,咱們將 host中的aidl文件夾原封不動複製到client ,複製完成client 目錄結構以下:
client中直接bind host中的service就能夠調用方法了,下面是 client中的代碼:
點擊按鈕查看效果,成功:
1.新建class Person:
新建Person.aidl
這樣咱們就能夠在 IMyAidlInterface新建方法getperson訪問該自定義數據結構了(Person 必須手動導入,as不會幫咱們自動導入):
若是想把 gedPerson方法單獨寫在另外一個結構裏,咱們能夠新建一個aidl, IPerson:
最後注意一點坑,咱們必須在host以及client(demo3)的gradle中加入一下配置,不然在AIDL中導入自定義Person的時候會報錯,找不到Person:
項目地址: https://github.com/dengshaomin/AndroidDemo.git ,在裏面找AIDL.ZIP