Что такое " заглушка "и" AIDL " для java?

Вопрос 1:

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

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

что это .Stub ?

Вопрос 2:

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

2 ответов


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

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


Эй, пожалуйста, проверьте этоhttp://developer.android.com/guide/components/aidl.html. Это поможет вам понять stub и AIDL.