所以:
- service 要實做這些 function
- client 可以要求 service 執行這些 function
aidl 這額 compiler,就是把 *.aidl 轉成 *.java
一個 java 檔,完成以上兩件事,讓..
- service focuse 在實做 function
- client 簡單呼叫這些 functrion
然後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 建
沒有留言:
張貼留言