전산쟁이들은 끊임없이 공부를 해야한다. 
일한 경력만큼 실력이 쌓이는, 그래서 연차가 많은 사람들의 노하우를 따라 잡을 수 없는 타직종과 달리 
전산쟁이들은 경력에 의해 늘어나는 내공과 더불어 신기술을 계속 익히고 습득해야 살아 남을 수 있다.

최근에 타팀과의 협업을 위한 회의가 있었다.
양쪽 다 안드로이드의 깊은 곳까지는 모르는 상태에서 회의를 진행하다보니
한 안건에 대해 목소리 큰 사람이 진리인냥 되어버렸다.
내심 찜찜하면서도 뭐라고 반박할 밑천이 없다보니 좀 더 검토합시다라는 지키지 못할 약속을 남긴채 끝을 냈다.

하나의 Process에서 돌고 있는 Service와 UI를 두 개의 process로 분리합시다 라는 안건에
Video sharing같이 초당 수십 frame을 전송해야 하는 경우, process를 분리해서 그 대용량 데이터를 어떻게 전달할 것인가?
안돼! 였다.


물론 해결책은 있었다.
Ashmem (Anonymous shared memory)
간략한 설명은 다음과 같다.
다른 Process간 메모리 공유를 위함이고
해당 공유메모리를 access 하고 있는 process를 counting하고 있기 때문에, reference count가 valid하다면 memory를 해제하지 않으며,
A process에서 memory create 한 후 return 되는 file description을 remote process에서 넘겨주고
전달받은 B process에서는 fd를 이용하여 해당 memory에 접근할 수 있는 원리로 동작한다.
참고 reference.
http://www.androidenea.com/2010/03/share-memory-using-ashmem-and-binder-in.html 

Android API중 MemoryFile이 Ashmem에 대한 wrapper function을 제공하는 것으로 보이나
소스를 살펴보면, A로부터 전달받은 File description을 이용하여 MemoryFile을 생성하는 생성자와
생성한 Ashmem의 Fd를 받아올 수 있는 getFileDescription함수가 hidden 처리 되어 있기 때문에 실제 동작 여부는 확인이 필요하다.
http://developer.android.com/reference/android/os/MemoryFile.html 

'관심거리 > Android' 카테고리의 다른 글

startManagingCursor()  (2) 2012.02.26
android - Resource string읽어오기  (1) 2011.11.29
CodePro AnalytiX 사용법  (0) 2011.10.19

+ Recent posts