27 Mart 2025'ten itibaren AOSP'yi derlemek ve AOSP'ye katkıda bulunmak için aosp-main yerine android-latest-release kullanmanızı öneririz. Daha fazla bilgi için AOSP'de yapılan değişiklikler başlıklı makaleyi inceleyin.
Koleksiyonlar ile düzeninizi koruyun
İçeriği tercihlerinize göre kaydedin ve kategorilere ayırın.
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 ve b 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 ve b değerlerini çıkarır ve a ile b 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.
AIDL ve bağlayıcı
IPC için bağlayıcı kullanan programlama arayüzlerini tanımlamak üzere Android Arayüz Tasarım Dilini (AIDL) kullanın. Daha fazla bilgi için AIDL'ye genel bakış başlıklı makaleyi inceleyin.
Bu sayfadaki içerik ve kod örnekleri, İçerik Lisansı sayfasında açıklanan lisanslara tabidir. Java ve OpenJDK, Oracle ve/veya satış ortaklarının tescilli ticari markasıdır.
Son güncelleme tarihi: 2025-08-05 UTC.
[[["Anlaması kolay","easyToUnderstand","thumb-up"],["Sorunumu çözdü","solvedMyProblem","thumb-up"],["Diğer","otherUp","thumb-up"]],[["İhtiyacım olan bilgiler yok","missingTheInformationINeed","thumb-down"],["Çok karmaşık / çok fazla adım var","tooComplicatedTooManySteps","thumb-down"],["Güncel değil","outOfDate","thumb-down"],["Çeviri sorunu","translationIssue","thumb-down"],["Örnek veya kod sorunu","samplesCodeIssue","thumb-down"],["Diğer","otherDown","thumb-down"]],["Son güncelleme tarihi: 2025-08-05 UTC."],[],[],null,["# Binder overview\n\n*Binder* is a system for interprocess\ncommunication that lets two processes on an Android-powered device\ncommunicate. Binder provides a means to execute function calls in another\nprocess that is completely transparent to the caller.\n\nIn binder terms, the calling process is considered the *client* and its\nendpoint is called the *binder proxy* or *proxy* . Conversely,\nthe process being called is the *server* and its endpoint is called the\n*binder node* or *node*.\n\nEach node can expose and implement its own interface. And, using a proxy, the\nclient can execute methods on a node interface as though invocation was a\nlocal function call. The following example shows a method being invoked: \n\n int result = someNodeInterface.foo(a, b); // someNodeInterface is a proxy object\n\nAssume that the client calling `foo()` is running in process A and the server\nimplementing `foo()` is running in process B. Figure 1 shows how this call is\nexecuted:\n\n**Figure 1.** Binder call execution.\n\nTo execute a method in another process, as shown in figure 1,\nthe following occurs:\n\n1. The client code in process A invokes the proxy code in process A. The proxy code in process A creates a transaction containing the following items:\n - An identifier for the node\n - An identifier for the `foo()` method on the node\n - A buffer containing a copy of the arguments `a` and `b`\n2. The transaction is submitted to the binder kernel driver.\n3. The binder kernel driver determines that process B hosts the node.\n4. The kernel copies the entire transaction into process B's address space.\n5. The kernel finds a thread in process B to handle the transaction and passes the transaction to it.\n6. The thread unpacks the transaction, finds the node, and sends the transaction to the node object.\n7. The node object obtains the function identifier from the transaction, unpacks `a` and `b` from the transaction buffer, and stores `a` and `b` in local variables.\n8. The node object calls `foo(a, b)` on the server code in process B.\n9. The result of the call is returned in a reply transaction, which is passed to the kernel driver and then back to the calling proxy in process A.\n10. The proxy returns that result to the caller in process A.\n\nBinder use cases\n----------------\n\nBinder can be used in a variety of scenarios where communication between\nsoftware in different processes must occur. For example:\n\n- A camera app uses binder to communicate with the camera server in\n another process. The camera server then uses binder to communicate with the\n camera HAL in another process.\n\n- An app uses binder to communicate with a system server in another process. The\n system server uses binder to talk to HALs in other processes.\n\n- An app in one process uses binder to communicate with a different app in\n another process.\n\n- The system daemon responsible for installing, updating, and removing\n apps (`installd`) uses binder to communicate with the Android\n runtime daemon ('artd') to compile apps.\n\nAIDL and binder\n---------------\n\nUse the Android Interface Design Language (AIDL) to define programming\ninterfaces that use binder for IPC. For further information, see the\n[AIDL overview](/docs/core/architecture/aidl).\n| **Note:** HIDL is deprecated; only AIDL is recommended for new implementations."]]