第一種是用Messenger封裝起來,使用Message來傳遞,開啟Service後,建立一個Messenger instance,使用Messenger的getBinder提出傳給service,而client也是透過取得的binder來創建Messenger來溝通。並且可以使用Messenger.replyTo來建立一個收訊息的接口來跟遠端service溝通。溝通的單位是bundle。
第二種是使用Android Interface Definition Language,簡單的說就是iBinder中定好溝通的規則,也就是functions。在server(service端)建立好iInterface的aidl實作的binder,在service中回傳該binder,然後在client端中也是用aidl檔承接轉型該ibinder至iInterface,雙方就透過iInterface中定義好的functions溝通。
一些概念解釋:
iBinder就是android中建立在ipc上的java層,用來使用ipc來溝通的。
Messenger其實就是封裝iBinder,使用Messenger類來透過ibinder來溝通。
AIDL則是在ibinder層先定義好傳輸資料,接著雙方用該接口來互動。該檔案需在sdk中編譯,並且對應相同的pacakge name,比如說你aidl package name是com.handsome.hydra你就得放在src/main/aidl/com/handsome/hydra/的資料夾下放IInterface.aidl,此後sdk編譯好後你才能使用IInterface.stub方法。
若你有使用ipc shared memory, message queue的經驗,基本上java那層就是封裝過的實作層,讓你用他們定義好的資料傳輸方式來使用ipc就是了。