Что такое "Stub" и "AIDL" для java?


Вопрос 1:

Я изучаю Android-Сервис и часто вижу такой код:

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

Что такое .Stub?

Вопрос 2:

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

2 26

2 ответа:

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

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