標籤:
前面兩片文章講解了通過AIDL和Messenger兩種方式實現Android IPC。而本文所講的並不是第三種IPC方式,而是對前面兩種方式進行封裝,這樣我們就不用直接把Aidl檔案,java檔案拷貝到用戶端了,而是為用戶端提供一個aar(Anroid Archive)包。通過這個aar包對AIDL或者Messenger進行封裝,最終用戶端就可以像調用一般的java類一樣,而不用處理通訊方面的內容。(實際上書中說是要打包成jar包,但是在建立的Java Library Module中,我沒能成功的建立Aidl檔案,最後選擇了aar。如何建立aar,請閱讀:Building an AAR Library in Android Studio)。
本文不再對代碼進行解釋,如果不清楚請先閱讀:
Android Programming: Pushing the Limits -- Chapter 7:Android IPC -- AIDL
Android Programming: Pushing the Limits -- Chapter 7:Android IPC -- Messenger
本文範例程式碼:
Service:https://github.com/ldb-github/WrappedAidlService
Client:https://github.com/ldb-github/WrappedAidlClient
服務端:
項目包括了兩個Module:
app Module是服務所在。
wrappedaidl Module是一個Android Library,最終這個Module產生aar包,提供給用戶端。這個模組實際就是把原來在用戶端中與服務端進行通訊的代碼封裝了起來。
這個項目中包含了Aidl 和 Messenger 兩種方式。其中:
ApiWrapper是對Aidl方式的封裝。
ApiWrapperByMessenger是對Messenger方式的封裝。
為了能夠回調用戶端,增加了一個回調介面ApiCallback,ApiWrapper或者ApiWrapperByMessenger會在通訊的不同時期調用相應的回調方法把訊息傳遞給用戶端。
用戶端:
這樣用戶端就不用直接拷貝服務端的檔案,而是添加aar包:
同時還得修改模組的build.gradle檔案:
這樣就可以在用戶端使用ApiCallback,ApiWrapper 和 ApiWrapperByMessenger了。
用戶端UI:
Android Programming: Pushing the Limits -- Chapter 7:Android IPC -- ApiWrapper