2017-03-27 82 views
0

我目前是一名初級開發者。我聽說過IPC,現在我正在學習Android AIDL。AIDL vs JAR/AAR

我製作了.aidl文件,我在服務中實現了.aidl中的方法,並且在另一個應用程序中使用了這些方法,但我沒有看到這一點。

爲什麼我不能只使用.aar.jar包含該服務的文件,而不使用AIDL?當我應該使用AIDL並且當我應該導入.jar文件時。更一般的說,當我們可以使用.jar文件時,使用IPC有什麼意義?

+1

IPC意味着InterProcessCommunication,所以當你想要在兩個不同的應用程序之間傳遞一些數據時,或者如果雙方都在同一個應用程序中,但是由不同的進程託管,你正在使用'AIDL' – pskink

回答

3

爲什麼我不能只使用包含該服務的.aar或.jar文件,而不使用AIDL?

從技術文檔https://developer.android.com/guide/components/aidl.html

使用AIDL是必要的前提是你讓來自不同應用的客戶端訪問服務以供IPC和要處理你的多線程服務。

當您將Service打包到aar或jar中時,此服務可以在任何地方運行,即在應用程序的相同或不同進程中運行。 AIDL專門爲IPC設計,即服務和應用程序在不同的進程中。

更一般的,當我們可以使用.jar文件時使用IPC有什麼意義?

IPC是操作系統提供的數據共享機制,jar是字節碼分配的手段。他們是不同的東西。

假設您想要使用某人提供的服務,並且您沒有它的源代碼或字節代碼。您只能在運行時訪問此服務,由供應商管理,不同於您自己的服務。在這種情況下,您需要提供商指定的AIDL才能與服務進行通信。

+0

謝謝!這是非常豐富的:)。順便說一句,在評論的最後一部分中,您說「您只能在運行時訪問此服務,並且在提供程序管理的進程中」。你能推薦我一些關於這個東西的文章嗎? –

+0

@MateutAlin我不知道是否有任何關於它的文章:(這只是一個具體的案例我彙編。我鏈接和服務指南的文檔應涵蓋該主題:https://developer.android.com/guide/components /services.html – nandsito

+0

好的,無論如何謝謝你的答案。 –