2012-07-11 50 views
0

我正在使用自定義ROM的Android框架。 有一個原因,我需要通過引用發送一個對象到另一個應用程序,而不是通過克隆數據。不需要AIDL或意圖,因爲他們需要通過Parcelable或Json複製數據。Android IPC參考

像這樣:

App1 
void func1(TextView t) 
{ 
    App2.func2(t); 
} 

App2 
void func2(TextView t) 
{ 
    String s=t.toString(); 
} 

猜測發送一提的是可能的,因爲聽說沒有在JVM進程的概念,所以沒有進程邊界。可能嗎?如果沒有,可以在JNI和C++共享內存下完成嗎?

回答

0

Android有它自己的名爲Dalvik的虛擬機,與JVM相反,Dalvik在不同的DalvikVM(進程)實例中運行不同的應用程序。因此,在Android中有幾個IPC機制(Binder就是其中之一)。

就你而言,你需要使用Ashmem。這是一種共享內存,但專門用於Android。我只有這方面的理論知識,從來沒有爲我自己嘗試過。

Here是一篇文章如何創建共享內存區域。

+0

[MemoryFile](http://developer.android.com/reference/android/os/MemoryFile.html)是一個ashmem包裝器,使用反射你可以得到一個你可以在進程間傳遞的文件描述符。 – Jens 2012-07-11 21:35:58

+0

要發送文件描述符,您可以使用活頁夾。 – Yury 2012-07-11 21:43:30

+0

謝謝,但我最近聽說AIDL在內部使用內存文件/共享內存,所以現在不需要打擾共享內存的性能。 – user1464119 2012-07-17 00:18:57

0

不,你不能有相同的參考,唯一的辦法就是通過各種IPC機制複製對象,但引用會不同,因爲那些是不能共享內存的2個獨立進程。