2012-05-18 29 views
25

Pytanie 1:Co to jest "skrót" i "AIDL" w języku java?

uczę usługę Android i często widzę kodu:

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

Co jest .Stub?

Pytanie 2:

sprawdziłem „AIDL”, ale chcę wiedzieć, dlaczego musimy użyć że zamiast pliku interfejsu Java?

Odpowiedz

26

'Stub' to klasa, która implementuje interfejs zdalny w sposób, który może być używany jako lokalny. Obsługuje marashalling/unmarshalling i wysyłanie/odbieranie danych do/z usługi zdalnej. Termin "skrót" jest zwykle używany do opisania tej funkcji w innych metodach RPC (COM, Java remoting itp.), Ale może to oznaczać nieco inne rzeczy.

IDL (Interface Definition Language) jest generalnie niezależny od języka i teoretycznie można wygenerować z niego kodeks C++ lub Python. System Android jest oparty na Javie, więc rozróżnienie jest subtelne. Jedną różnicą jest to, że możesz mieć tylko jeden interfejs w pliku .aidl, a Java pozwala na wiele klas/interfejsów na plik .java. Istnieją również pewne reguły, dla których obsługiwane są typy, więc nie jest to dokładnie to samo, co interfejs Java i nie można używać jednego z nich zamiast AIDL.

+0

Nadal jestem zdezorientowany. Może potrzebuję więcej czasu. O narzędziach IPC w różnych językach komputerowych są takie same? lub są różne, ale wszyscy muszą robić tego rodzaju rzeczy. A w Javie szczególnie opartym na SDK, jeśli użyjemy IDL, będzie łatwiej? Czy mogę to tak wyjaśnić? Dziękuję Nikolay. – AmyWuGo

+1

To są ogólne pojęcia. Chociaż prawdopodobnie możesz zaimplementować coś innego niż AIDL w systemie Android, nie będzie to standardowe, więc możesz po prostu myśleć o AIDL jako jedynym standardowym mechanizmie RPC. –

+0

Możesz zacząć tutaj, aby uzyskać podstawowy pomysł: http://pl.wikipedia.org/wiki/Remote_procedure_call –