Binder adalah sistem untuk komunikasi antarproses yang memungkinkan dua proses di perangkat berdaya Android berkomunikasi. Binder menyediakan cara untuk mengeksekusi panggilan fungsi dalam proses lain yang sepenuhnya transparan bagi pemanggil.
Dalam istilah binder, proses panggilan dianggap sebagai klien dan endpoint-nya disebut proxy binder atau proxy. Sebaliknya, proses yang dipanggil adalah server dan endpointnya disebut node binder atau node.
Setiap node dapat mengekspos dan mengimplementasikan antarmukanya sendiri. Selain itu, dengan menggunakan proxy, klien dapat mengeksekusi metode pada antarmuka node seolah-olah pemanggilan adalah panggilan fungsi lokal. Contoh berikut menunjukkan metode yang dipanggil:
int result = someNodeInterface.foo(a, b); // someNodeInterface is a proxy object
Asumsikan bahwa klien yang memanggil foo()
berjalan dalam proses A dan server yang menerapkan foo()
berjalan dalam proses B. Gambar 1 menunjukkan cara panggilan ini
dieksekusi:
Gambar 1. Eksekusi panggilan Binder.
Untuk mengeksekusi metode dalam proses lain, seperti yang ditunjukkan pada gambar 1, hal berikut akan terjadi:
- Kode klien dalam proses A memanggil kode proxy dalam proses A. Kode
proxy dalam proses A membuat transaksi yang berisi item berikut:
- ID untuk node
- ID untuk metode
foo()
pada node - Buffer yang berisi salinan argumen
a
danb
- Transaksi dikirimkan ke driver kernel binder.
- Driver kernel binder menentukan bahwa proses B menghosting node.
- Kernel menyalin seluruh transaksi ke ruang alamat proses B.
- Kernel menemukan thread dalam proses B untuk menangani transaksi dan meneruskan transaksi tersebut ke thread.
- Thread membongkar transaksi, menemukan node, dan mengirim transaksi ke objek node.
- Objek node mendapatkan ID fungsi dari transaksi, mengekstrak
a
danb
dari buffer transaksi, serta menyimpana
danb
dalam variabel lokal. - Objek node memanggil
foo(a, b)
pada kode server dalam proses B. - Hasil panggilan ditampilkan dalam transaksi balasan, yang diteruskan ke driver kernel, lalu kembali ke proxy panggilan dalam proses A.
- Proxy menampilkan hasil tersebut ke pemanggil dalam proses A.
Kasus penggunaan Binder
Binder dapat digunakan dalam berbagai skenario saat komunikasi antara software dalam proses yang berbeda harus terjadi. Contoh:
Aplikasi kamera menggunakan binder untuk berkomunikasi dengan server kamera dalam proses lain. Server kamera kemudian menggunakan binder untuk berkomunikasi dengan HAL kamera dalam proses lain.
Aplikasi menggunakan binder untuk berkomunikasi dengan server sistem dalam proses lain. Server sistem menggunakan binder untuk berkomunikasi dengan HAL dalam proses lain.
Aplikasi dalam satu proses menggunakan binder untuk berkomunikasi dengan aplikasi lain dalam proses yang berbeda.
Daemon sistem yang bertanggung jawab untuk menginstal, mengupdate, dan menghapus aplikasi (
installd
) menggunakan binder untuk berkomunikasi dengan daemon runtime Android ('artd') untuk mengompilasi aplikasi.