Binder, Android destekli bir cihazdaki iki işlemin iletişim kurmasına olanak tanıyan, işlemler arası iletişim sistemidir. Binder, işlev çağrılarını arayan için tamamen şeffaf olan başka bir süreçte yürütme olanağı sağlar.
Binder terimleriyle, çağırma işlemi istemci olarak kabul edilir ve uç noktasına binder proxy veya proxy adı verilir. Buna karşılık, çağrılan işleme sunucu, uç noktasına ise bağlayıcı düğüm veya düğüm adı verilir.
Her düğüm kendi arayüzünü kullanıma sunabilir ve uygulayabilir. Ayrıca, istemci bir proxy kullanarak bir düğüm arayüzünde yöntemleri, çağırma işlemi yerel bir işlev çağrısıymış gibi yürütebilir. Aşağıdaki örnekte bir yöntemin nasıl çağrıldığı gösterilmektedir:
int result = someNodeInterface.foo(a, b); // someNodeInterface is a proxy object
foo()
işlevini çağıran istemcinin A sürecinde, foo()
işlevini uygulayan sunucunun ise B sürecinde çalıştığını varsayalım. Şekil 1'de bu çağrının nasıl yürütüldüğü gösterilmektedir:
1.şekil Bağlayıcı çağrısı yürütme.
Şekil 1'de gösterildiği gibi başka bir süreçte bir yöntemi yürütmek için:
- A işlemindeki istemci kodu, A işlemindeki proxy kodunu çağırır. A işlemindeki proxy kodu, aşağıdaki öğeleri içeren bir işlem oluşturur:
- Düğümün tanımlayıcısı
- Düğümdeki
foo()
yöntemi için tanımlayıcı a
veb
bağımsız değişkenlerinin bir kopyasını içeren arabellek
- İşlem, bağlayıcı çekirdek sürücüsüne gönderilir.
- Bağlayıcı çekirdek sürücüsü, B sürecinin düğüme ev sahipliği yaptığını belirler.
- Çekirdek, işlemin tamamını B sürecinin adres alanına kopyalar.
- Çekirdek, işlemi işlemek için B sürecinde bir iş parçacığı bulur ve işlemi bu iş parçacığına iletir.
- İş parçacığı, işlemi açar, düğümü bulur ve işlemi düğüm nesnesine gönderir.
- Düğüm nesnesi, işlev tanımlayıcısını işlemden alır, işlem arabelleğinden
a
veb
değerlerini çıkarır vea
ileb
değerlerini yerel değişkenlerde saklar. - Düğüm nesnesi, B işlemindeki sunucu kodunda
foo(a, b)
işlevini çağırır. - Aramanın sonucu, çekirdek sürücüsüne ve ardından A işlemindeki arayan proxy'ye geri iletilen bir yanıt işleminde döndürülür.
- Proxy, bu sonucu A sürecindeki arayana döndürür.
Binder kullanım alanları
Binder, farklı süreçlerdeki yazılımlar arasında iletişimin gerçekleşmesi gereken çeşitli senaryolarda kullanılabilir. Örneğin:
Bir kamera uygulaması, başka bir işlemdeki kamera sunucusuyla iletişim kurmak için bağlayıcıyı kullanır. Kamera sunucusu daha sonra başka bir işlemdeki kamera HAL ile iletişim kurmak için bağlayıcıyı kullanır.
Bir uygulama, başka bir işlemdeki sistem sunucusuyla iletişim kurmak için bağlayıcı kullanır. Sistem sunucusu, diğer işlemlerdeki HAL'lerle iletişim kurmak için bağlayıcıyı kullanır.
Bir süreçteki bir uygulama, başka bir süreçteki farklı bir uygulamayla iletişim kurmak için bağlayıcıyı kullanır.
Uygulamaları yüklemek, güncellemek ve kaldırmakla sorumlu sistem arka plan programı (
installd
), uygulamaları derlemek için Android çalışma zamanı arka plan programıyla ("artd") iletişim kurmak üzere bağlayıcıyı kullanır.