2012-05-18 5 views
25

Вопрос 1:Что такое "Stub" и "AIDL" для java?

Я учусь Android службы и часто видим такой код:

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

Что .Stub?

Вопрос 2:

Я проверил «AIDL», но я хочу знать, почему мы должны использовать, что вместо файла интерфейса Java?

ответ

26

«Stub» - это класс, который реализует удаленный интерфейс таким образом, что вы можете использовать его, как если бы он был локальным. Он обрабатывает марафонирование/разборку данных и отправку/получение в/из удаленной службы. Термин «заглушка» обычно используется для описания этой функции в других методах RPC (COM, Java remoting и т. Д.), Но это может означать несколько разные вещи.

IDL (язык определения интерфейса), как правило, не зависит от языка, и вы можете теоретически генерировать код C++ или Python. Android один из них основан на Java, поэтому различие является тонким. Одно из отличий заключается в том, что вы можете иметь только один интерфейс в файле .aidl, тогда как Java допускает несколько классов/интерфейсов на один файл .java. Существуют также некоторые правила, для которых поддерживаются типы, поэтому он не совсем то же, что и интерфейс Java, и вы не можете использовать его вместо AIDL.

+0

Я все еще смущен. Возможно, мне нужно больше времени. О инструментах IPC на разных компьютерных языках одинаковы? или они разные, но все они должны делать такие вещи. А на Java, особенно на базе SDK, если мы используем IDL, это будет проще? Могу я объяснить это так? Спасибо, Николай. – AmyWuGo

+1

Это общие понятия. Хотя вы, вероятно, могли бы реализовать что-то другое, кроме AIDL в Android, оно не будет стандартным, поэтому вы можете просто думать о AIDL как о единственном стандартном RPC-механизме. –

+0

Вы можете начать здесь, чтобы получить основную идею: http://en.wikipedia.org/wiki/Remote_procedure_call –