2017/8/24

AIDL

AIDL 宣告了 service 提供的 function。
所以:
  • service 要實做這些 function
  • client 可以要求 service 執行這些 function

aidl 這額 compiler,就是把 *.aidl 轉成 *.java
一個 java 檔,完成以上兩件事,讓..
  • service focuse 在實做 function
  • client 簡單呼叫這些 functrion
而 client 呼叫 function 時,把對應 argument 包裝起來,呼叫 Binder,交給 service 處理,
然後service處理完,把 result 包裝起來,傳回 binder,
clien5 再把 result 解開,交給 caller

這些動作,都坐在 *.aidl 轉成的 *.java 裡。

所以 *.aidl 轉成的 *.java,包含了給 client 和 service 兩人用的 code
-- 當然,兩人各用各的 function,只是寫在同一個 *.java 裡。

aidl 做出來的 *.java,最外層是直接翻譯 *.aidl 內容,class。
裡面是 static abstract class : Stub
這個 Stub 是上面寫的做雜事的主體,
雖然是同時給 service 和 client 用。但是大部分是給 service 用的。
給 client 用的只有一個 static class : Proxy

然後提供一個生成函式給 client 用: asInterface( )
他的內容就是把 Proxy new 出來。

至於service,就直接拿 Stub class 來用,實做 aidl 宣告的 interface function 就可以。


這一篇StackOverflow 的回答...
'Stub' is a class that implements the remote interface in a way that you can use it as if it were a local one. 
It handles data marashalling/unmarshalling and sending/receiving to/from the remote service. 
The term 'stub' is generally used to describe this functionality in other RPC methods (COM, Java remoting, etc.), 
but it can mean slightly different things.

所以programmer 建

沒有留言:

張貼留言