Binder là một hệ thống giao tiếp liên quy trình, cho phép hai quy trình trên một thiết bị chạy Android giao tiếp với nhau. Trình liên kết cung cấp một phương tiện để thực thi các lệnh gọi hàm trong một quy trình khác hoàn toàn minh bạch đối với phương thức gọi.
Theo thuật ngữ liên kết, quy trình gọi được coi là máy khách và điểm cuối của quy trình này được gọi là proxy liên kết hoặc proxy. Ngược lại, quy trình đang được gọi là máy chủ và điểm cuối của quy trình này được gọi là nút liên kết hoặc nút.
Mỗi nút có thể hiển thị và triển khai giao diện riêng. Và bằng cách sử dụng một proxy, ứng dụng có thể thực thi các phương thức trên một giao diện nút như thể lệnh gọi là một lệnh gọi hàm cục bộ. Ví dụ sau đây cho thấy một phương thức đang được gọi:
int result = someNodeInterface.foo(a, b); // someNodeInterface is a proxy object
Giả sử ứng dụng gọi foo()
đang chạy trong quy trình A và máy chủ triển khai foo()
đang chạy trong quy trình B. Hình 1 cho thấy cách thực hiện lệnh gọi này:
Hình 1. Thực thi lệnh gọi Binder.
Để thực thi một phương thức trong một quy trình khác, như minh hoạ trong hình 1, những việc sau sẽ xảy ra:
- Mã máy khách trong quy trình A sẽ gọi mã proxy trong quy trình A. Mã proxy trong quy trình A tạo một giao dịch chứa các mục sau:
- Giá trị nhận dạng của nút
- Giá trị nhận dạng cho phương thức
foo()
trên nút - Một vùng đệm chứa bản sao của các đối số
a
vàb
- Giao dịch được gửi đến trình điều khiển hạt nhân liên kết.
- Trình điều khiển kernel liên kết xác định rằng quy trình B lưu trữ nút.
- Kernel sao chép toàn bộ giao dịch vào không gian địa chỉ của quy trình B.
- Nhân tìm thấy một luồng trong quy trình B để xử lý giao dịch và chuyển giao dịch đó cho luồng này.
- Luồng này sẽ giải nén giao dịch, tìm nút và gửi giao dịch đến đối tượng nút.
- Đối tượng nút lấy giá trị nhận dạng hàm từ giao dịch, giải nén
a
vàb
từ vùng đệm giao dịch, đồng thời lưu trữa
vàb
trong các biến cục bộ. - Đối tượng nút gọi
foo(a, b)
trên mã máy chủ trong quy trình B. - Kết quả của lệnh gọi được trả về trong một giao dịch phản hồi, được truyền đến trình điều khiển nhân rồi quay lại proxy gọi trong quy trình A.
- Proxy sẽ trả về kết quả đó cho phương thức gọi trong quy trình A.
Các trường hợp sử dụng Binder
Bạn có thể dùng Binder trong nhiều trường hợp mà hoạt động giao tiếp giữa phần mềm trong các quy trình khác nhau phải diễn ra. Ví dụ:
Ứng dụng máy ảnh sử dụng liên kết để giao tiếp với máy chủ camera trong một quy trình khác. Sau đó, máy chủ camera sẽ dùng trình liên kết để giao tiếp với HAL camera trong một quy trình khác.
Một ứng dụng sử dụng liên kết để giao tiếp với máy chủ hệ thống trong một quy trình khác. Máy chủ hệ thống sử dụng liên kết để giao tiếp với HAL trong các quy trình khác.
Một ứng dụng trong một quy trình sử dụng liên kết để giao tiếp với một ứng dụng khác trong một quy trình khác.
Dịch vụ hệ thống chịu trách nhiệm cài đặt, cập nhật và xoá các ứng dụng (
installd
) sử dụng liên kết để giao tiếp với dịch vụ thời gian chạy Android ("artd") nhằm biên dịch các ứng dụng.