2011-01-15 28 views
30

Tôi đang lập trình một ứng dụng phát trực tuyến vô tuyến. Tôi chạy "radio play" như một Dịch vụ từ xa bằng cách sử dụng kỹ thuật giao diện AIDL để giao tiếp với Dịch vụ. Nhưng tôi không thực sự hiểu một điều."In/out/inout" trong giá trị tham số giao diện AIDL?

"ra" trong giá trị thông số giao diện AIDL là gì?

Như thế này:

String doSomething(in String a, out String[] b); 

Tôi hiểu "trong", đó là gửi dữ liệu đến từ xa khi phương pháp này được gọi là từ hoạt động.

"ra" là gì và tại sao chúng ta cần "in" và "out" trong cùng một phương pháp? Trong trường hợp nào thì chúng ("out/inout") được sử dụng? Tại sao String[] "không"?

Xin giúp ..

+3

Tôi nghĩ rằng @gladed đã trả lời câu hỏi của bạn một cách đầy đủ. Sẽ rất tuyệt nếu bạn kiểm tra câu trả lời của mình. –

Trả lời

45

Trong AIDL, thẻ out xác định một tham số đầu ra-only. Nói cách khác, nó là một tham số không chứa dữ liệu thú vị trên đầu vào, nhưng sẽ được lấp đầy với dữ liệu trong suốt phương thức.

Ví dụ, một phương pháp mà bản sao một mảng byte có thể được xác định như thế này:

void copyArray(in byte[] source, out byte[] dest); 

Thẻ inout chỉ ra rằng các tham số có ý nghĩa trên cả hai đầu vào và đầu ra. Ví dụ:

void charsToUpper(inout char[] chars); 

này rất quan trọng bởi vì các nội dung của tất cả các tham số phải marshalled (đăng, truyền, nhận và deserialized). Các thẻ vào/ra cho phép Binder bỏ qua bước marshalling để có hiệu năng tốt hơn.

+1

Liên kết AIDL bị hỏng. Chính xác là [AIDL] (http://developer.android.com/guide/components/aidl.html) – kaneda

Các vấn đề liên quan