2012-05-18 27 views
25

Câu hỏi 1:"Stub" và "AIDL" trong java là gì?

Tôi đang nghiên cứu dịch vụ Android và thường xuyên xem mã như thế này:

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

.Stub là gì?

Câu hỏi 2:

Tôi đã kiểm tra "AIDL", nhưng tôi muốn biết lý do tại sao chúng ta phải sử dụng thay vì các tập tin giao diện Java?

Trả lời

26

'Stub' là một lớp thực hiện giao diện từ xa theo cách mà bạn có thể sử dụng nó như thể nó là một địa phương. Nó xử lý dữ liệu marashalling/unmarshalling và gửi/nhận đến/từ dịch vụ từ xa. Thuật ngữ 'stub' thường được sử dụng để mô tả chức năng này trong các phương pháp RPC khác (COM, Java remoting, vv), nhưng nó có thể có nghĩa là những thứ hơi khác nhau.

IDL (Ngôn ngữ định nghĩa giao diện) nói chung là độc lập về ngôn ngữ và bạn có thể tạo mã C++ hoặc Python từ đó về mặt lý thuyết. Mặc dù Android là dựa trên Java, vì vậy sự khác biệt là tinh tế. Một điểm khác biệt là bạn chỉ có thể có một giao diện duy nhất trong một tệp .aidl, trong khi Java cho phép nhiều lớp/giao diện cho mỗi tệp .java. Ngoài ra còn có một số quy tắc cho các loại được hỗ trợ, do đó, nó không chính xác giống như một giao diện Java, và bạn không thể sử dụng một quy tắc thay vì AIDL.

+0

Tôi vẫn còn bối rối. Có lẽ tôi cần thêm thời gian. Về thực hiện IPC trong ngôn ngữ máy tính khác nhau là như nhau? hoặc chúng khác nhau nhưng tất cả chúng đều cần phải làm điều đó. Và trong Java đặc biệt dựa trên SDK, nếu chúng ta sử dụng IDL, nó sẽ dễ dàng hơn? Tôi có thể giải thích nó như thế này không? Cảm ơn bạn Nikolay. – AmyWuGo

+1

Đó là những khái niệm chung. Trong khi bạn có thể có thể thực hiện một cái gì đó khác hơn là AIDL trong Android, nó sẽ không được tiêu chuẩn, vì vậy bạn chỉ có thể nghĩ về AIDL là cơ chế RPC tiêu chuẩn duy nhất. –

+0

Bạn có thể bắt đầu ở đây để lấy ý tưởng cơ bản: http://en.wikipedia.org/wiki/Remote_procedure_call –