2012-05-18 16 views
25

Pregunta 1:¿Qué es "Stub" y "AIDL" para en java?

estoy estudiando servicio de Android y, a menudo veo código como este:

private ISampleService.Stub sampleServiceIf = new ISampleService.Stub(){} 

Lo que es .Stub?

Pregunta 2:

me marcó "AIDL", pero quiero saber por qué tenemos que utilizar que en lugar del archivo de interfaz de Java?

Respuesta

26

'Stub' es una clase que implementa la interfaz remota de forma que puede usarla como si fuera local. Maneja el marashalling/unmarshalling de datos y el envío/recepción a/desde el servicio remoto. El término 'stub' se usa generalmente para describir esta funcionalidad en otros métodos RPC (COM, Java remoting, etc.), pero puede significar cosas ligeramente diferentes.

IDL (Lenguaje de definición de interfaz) es generalmente independiente del lenguaje, y en teoría podría generar código de código de C++ o Python. Sin embargo, el de Android está basado en Java, por lo que la distinción es sutil. Una diferencia es que solo puede tener una sola interfaz en un archivo .aidl, mientras que Java permite múltiples clases/interfaces por archivo .java. También hay algunas reglas para las que se admiten tipos, por lo que no es exactamente lo mismo que una interfaz Java, y no se puede usar una en lugar de AIDL.

+0

Todavía estoy confundido. Tal vez necesito más tiempo. Acerca de los implementos de IPC en diferentes lenguajes de computadora son los mismos? o son diferentes, pero todos necesitan hacer ese tipo de cosas. Y en Java especialmente basado en SDK, si usamos IDL, será más fácil? ¿Podría explicarlo así? Gracias Nikolay. – AmyWuGo

+1

Esos son conceptos generales. Aunque probablemente podría implementar algo más que AIDL en Android, no será estándar, por lo que puede pensar en AIDL como el único mecanismo RPC estándar. –

+0

Puede comenzar aquí para obtener la idea básica: http://en.wikipedia.org/wiki/Remote_procedure_call –