[펌]http://kaludin.egloos.com/2653125

AIDL이란?

 

http://developer.android.com/guide/developing/tools/aidl.html

 


 

http://www.androidpub.com/8013

AIDL 쉽게 설명할 수 있는 부분은 아닙니다만 간단하게 정리를 해보겠습니다.

AIDL은 Android Interface description language의 약자입니다. 말그대로 인터페이스를 정의하는 언어입니다. AIDL파일을 열어보면 Java에서와 비슷하게 Method를 정의하는 코드를 볼 수 있습니다. Corba의 IDL과 같은 것을 Android에서 사용한다고 생각하면 됩니다. AIDL Tool은 AIDL파일에 적합한 Java Code를 자동으로 생성시켜주는 툴입니다. (Corba는 Java의 RMI와 비슷한 역할을 하는 표준이라고 생각하시면 됩니다.)

IDL은 보통 RPC(Remote Procedure Call)에서 많이 사용됩니다. 서로 다른 프로세스 혹은 네트워크간에 함수를 호출하기 위해서는 인터페이스가 바뀔때마다 언어와 구조에 맞는 코드를 생성해주어야 하는데. 실제 코드를 생성하는 부분은 툴에 맞기고 프로그래머는 IDL만 정의하도록 구성됩니다.

AIDL은 Android에서 사용되는 IPC (Inter process communication), 안드로이드 구조를 이야기할때 Binder라고 일컬어지는 부분을 사용하기 위해서 정의합니다. Remote Service 라는 것은 같은 프로세스가 아니라 다른 프로세스에서 오는 함수 호출을 처리하는 Service이고 그것을 연결해주는데 Binder가 사용되고 있습니다. 그 Binder를 사용하는 코드를 자동으로 생성시켜주는 것이 AIDL이지요.

Binder가 Android 프레임워크의 근간이되는 중요한 역할을 하고 있습니다만 머 실제 어플리케이션에서 그 존재를 알아야할일은 많이 없습니다.

APIDemos 예제에서 메시지가 뜨는 과정이 중요한 것이지 그 메시지가 보여지는 것이 중요한 것은 아닙니다. RemoteService는 다른 어플리케이션 혹은 다른 프로세스에서 호출될 수 있는 서비스를 생성할때 사용한다고 이해하시면 됩니다.

 

http://www.androidpub.com/6167

2) Service에는 두가지 라이프사이클이 있을수 있는데 하나가 onStart와 onStop이고 하나가 onBind와 onUnbind되는 경우가 있습니다. onStart의 경우 그냥 서비스를 실행시키고 Intent에 전달된 Data만 처리하는 경우이지만, onBind의 경우 연결이 생성되고 AIDL을 통해서 서로 다른 프로세스에서 IPC를 통해 오는 Call을 처리해야하는 경우 사용됩니다. 근데 onBind는 일반 어플리케이션 작성시에는 쓸일이 많이 없습니다.

원래 이 두부분이 윈도우즈 메시지 처리구조와 프로세스 간의 IPC 처리 구조에 대한 이해 없이 이해하기가 힘든 부분입니다. 많이 안쓰이는 부분은 일단 넘어가시고 많이 쓰인다고 말씀드린 부분만 일단 익혀두시면 좋을듯 합니다.

 

 


 

http://codelab.textcube.com/457

1. 인터페이스(aidl) 생성
2. 구현클래스 생성
3. 메니페스트에 적고
4. 엑티비티에서 해당 클래스를가져와서
5. 구현된 함수를 사용.

의 순서로 진행됩니다.

사실 엑티비티 레벨이니 서비스 레벨이니 신경안써도 돼는 작은 어플에서는 샤용할일이 없을듯.


...........


지금 생각해보니 평소하던데로
XxxService , XxxServiceImpl이라는 편이 차라리 읽기 편하지 싶음.
I를 앞에붙여서 인터페이스임을 표시하는게 어느동네 표기법이더라?


덧. 서비스 클래스만 만들면 훨씬더간단해지는데 그건 이따가 자고일어나서 해보고 포스팅하겠음.

 


 

http://www.flowdas.com/blog/archives/2337.html

안 드로이드 AIDL 문법(Android AIDL Syntax)

자주 받는 질문중의 하나는 “AIDL의 정확한 문법이 어떻게 되는가?” 입니다. 안드로이드의 문서에는 예제 형태로만 설명되어 있을 뿐 형식화된 문법이 제시되지 않고 있습니다. 대충 알고 대충 써라? 천만의 말씀.

 안드로이드 (Android) 1.6 AIDL의 BNF Grammar 입니다. Yacc 문법을 따릅니다.

          ......          

PARCELABLE, INTERFACE, IN, OUT, INOUT, ONEWAY 는 각각 키워드(Keyword) parcelable, interface, in, out, inout, oneway를 뜻하고, IMPORT, PACKAGE 는 각각 import, package 문장 전체를 뜻합니다. ARRAY 는 하나 이상의 []를 뜻하고, GENERIC 은 Collection<Object,String>과 같은 Java Generic 표현을 뜻합니다. IDENTIFIER 는 대략 Java 의 클래스 명으로 쓸 수 있는 문자열이라고 보시면 됩니다. 주석 관련 구문 요소들은 생략했습니다.
SDK 의 AIDL 설명에는 나오지 않지만, oneway 키워드를 인터페이스 또는 메쏘드 앞에 붙일 수 있음을 알 수 있습니다. One-way call 에 대한 설명은 android.os.IBinder.FLAG_ONEWAY 에 대한 SDK 문서에 등장합니다. 비록 AIDL 에서의 사용법을 설명하고 있지는 않지만, 메쏘드 실행이 끝나기를 기다리지 않고 호출 즉시 복귀하는 방법을 제공하고 있음을 알 수 있습니다. AIDL 에서 oneway 로 지정한 메쏘드들의 Proxy 는 모두 transact() 를 호출할 때 FLAG_ONEWAY 를 포함하게 됩니다. 인터페이스에 oneway 를 지정하면 모든 메쏘드에 oneway 를 지정한 효과가 발생합니다. 다중 배열은 지원되는 반면 인터페이스 계승은 지원되지 않음을 확인할 수 있습니다.

 


스텁(stub)


스텁은 원격 객체에 대한 메소드 호출을 실제 구현된 원격 객체가 있는 서버로 전송하는 일을 담당하는 대리자 역할을 하는 객체이다. 클라이언트 객체가 가지게 되는 원격 객체에 대한 참조는 실제로는 지역의 스텁에 대한 참조이다. 스텁 파일은 서버 쪽과 클라이언트 쪽 모두에 필요하다. Naming 클래스나 Registry 인터페이스의 lookup() 메소드를 사용하여 RMI 등록부에 등록된 원격 객체에 대한 참조를 얻을 때 이 메소드가 반환하는 객체는 실제 원격 서버 객체가 아니라 원격 서버에 대한 스텁 객체가 된다.

+ Recent posts