2012-07-11 2 views
0

나는 사용자 정의 ROM에 대한 안드로이드 프레임 워크와 함께 일하고 있습니다. 이유 때문에 데이터를 복제하지 않고 참조로 다른 응용 프로그램에 개체를 보내야합니다. Parcelable 또는 Json을 통해 데이터를 복사해야하기 때문에 AIDL 또는 Intent를 원하지 않습니다. 이처럼참조로 안드로이드 IPC

: 나는 JVM에서 프로세스의 개념, 그래서 프로세스의 어떤 경계가 없기 들어 있기 때문에 참조를 전송

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

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

추측이 가능하다. 가능한가? 그렇지 않다면 C++ 공유 메모리를 사용하여 JNI에서 수행 할 수 있습니까?

답변

0

Android는 Dalvik이라는 자체 가상 머신을 가지고 있으며 DVM은 DalvikVM (프로세스)의 다른 인스턴스에서 다른 애플리케이션을 실행합니다. 따라서 안드로이드에는 몇 가지 IPC 메커니즘이있다 (Binder는 그 중 하나이다).

귀하의 경우에는 Ashmem을 사용해야합니다. 그것은 일종의 공유 메모리이지만 특별히 Android 용입니다. 나는이 영역에서 이론적 지식 만 갖고 있으며 내 자신을 위해 결코 시도하지 않았다.

Here 공유 메모리 영역을 만드는 방법입니다.

+0

[MemoryFile] (http://developer.android.com/reference/android/os/MemoryFile.html)은 ashmem 래퍼이며 반사를 사용하면 프로세스간에 전달할 수있는 파일 설명자를 얻을 수 있습니다. – Jens

+0

파일 설명자를 보내려면 바인더를 사용할 수 있습니다. – Yury

+0

고마워요.하지만 AIDL이 메모리 파일/공유 메모리를 내부적으로 사용한다는 소식을 들었습니다. 이제 성능을 위해 공유 메모리를 신경 쓰지 않아도됩니다. – user1464119

0

아니요, 동일한 참조를 사용할 수 없습니다. 유일한 방법은 다양한 IPC 기술자를 통해 개체를 복사하는 것이지만 참조는 메모리를 공유 할 수없는 2 개의 별도 프로세스이므로 다를 수 있습니다.