2012-05-18 62 views
25

Soru 1:Java için "Stub" ve "AIDL" nedir?

Ben Android hizmet okuyan ve sık sık böyle kodunu görmek am:

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

.Stub nedir?

Soru 2:

ben "AIDL" işaretli ama biz Java arayüzü dosyası yerine o kullanmak zorunda neden bilmek istiyorum?

cevap

26

'Stub', uzak arabirimi, onu yerel bir dosya gibi kullanabileceğiniz şekilde uygulayan bir sınıftır. Veri marashalling/unmarshalling ve uzak servise/dan uzaktan gönderme/gönderme işlemlerini gerçekleştirir. 'Stub' terimi genellikle bu işlevselliği diğer RPC yöntemlerinde (COM, Java remoting, vb.) Tanımlamak için kullanılır, ancak biraz farklı şeyler anlamına gelebilir.

IDL (Arabirim Tanım Dili) genellikle dilden bağımsızdır ve teorik olarak C++ veya Python saplama kodu oluşturabilirsiniz. Android bir Java tabanlı olsa da, ayrım ince. Bir fark sadece .aidl dosyasında tek bir arayüze sahip olmanızdır; Java ise .java dosyası başına birden fazla sınıf/arayüze izin verir. Ayrıca, türlerin desteklendiği bazı kurallar da vardır, bu nedenle bir Java arabirimiyle tam olarak aynı değildir ve AIDL yerine bir tane kullanamazsınız.

+0

Hala kafam karıştı. Belki daha fazla zamana ihtiyacım var. IPC'nin farklı bilgisayar dilindeki uygulamaları aynı mıdır? ya da farklılar ama hepsinin böyle bir şey yapması gerekiyor. Ve özellikle SDK'ya dayanan Java'da, IDL kullanıyorsak daha kolay olacak mı? Bunu böyle açıklayabilir miyim? Teşekkürler Nikolay. – AmyWuGo

+1

Bunlar genel kavramlardır. Android'de AIDL'den başka bir şey uygulayabilseniz de, standart olmayacaktır, böylece AIDL'yi yalnızca standart RPC mekanizması olarak düşünebilirsiniz. –

+0

Temel fikir edinmek için buradan başlayabilirsiniz: http://en.wikipedia.org/wiki/Remote_procedure_call –