Omówienie segregatora

Binder to system komunikacji międzyprocesowej, który umożliwia komunikację między dwoma procesami na urządzeniu z Androidem. Binder umożliwia wykonywanie wywołań funkcji w innym procesie, co jest całkowicie niewidoczne dla wywołującego.

W terminologii bindera proces wywołania jest uważany za klienta, a jego punkt końcowy jest nazywany proxy bindera lub proxy. Z kolei wywoływany proces to serwer, a jego punkt końcowy to węzeł bindera lub węzeł.

Każdy węzeł może udostępniać i implementować własny interfejs. Za pomocą serwera proxy klient może wykonywać metody w interfejsie węzła tak, jakby wywołanie było lokalnym wywołaniem funkcji. Poniższy przykład pokazuje wywołanie metody:

int result = someNodeInterface.foo(a, b); // someNodeInterface is a proxy object

Załóżmy, że klient wywołujący foo() działa w procesie A, a serwer implementujący foo() działa w procesie B. Na rysunku 1 pokazano, jak to wywołanie jest wykonywane:

Wykonywanie wywołania Binder.

Rysunek 1. Wykonywanie wywołania Binder.

Aby wykonać metodę w innym procesie, jak pokazano na rysunku 1, wykonaj te czynności:

  1. Kod klienta w procesie A wywołuje kod proxy w procesie A. Kod serwera proxy w procesie A tworzy transakcję zawierającą te elementy:
    • Identyfikator węzła.
    • Identyfikator metody foo() na węźle.
    • Bufor zawierający kopię argumentów ab
  2. Transakcja jest przesyłana do sterownika jądra bindera.
  3. Sterownik jądra Binder stwierdza, że proces B hostuje węzeł.
  4. Jądro kopiuje całą transakcję do przestrzeni adresowej procesu B.
  5. Jądro znajduje wątek w procesie B, który ma obsłużyć transakcję, i przekazuje mu ją.
  6. Wątek rozpakowuje transakcję, znajduje węzeł i wysyła transakcję do obiektu węzła.
  7. Obiekt węzła pobiera identyfikator funkcji z transakcji, rozpakowuje ab z bufora transakcji i zapisuje ab w zmiennych lokalnych.
  8. Obiekt węzła wywołuje funkcję foo(a, b) w kodzie serwera w procesie B.
  9. Wynik wywołania jest zwracany w transakcji odpowiedzi, która jest przekazywana do sterownika jądra, a następnie z powrotem do wywołującego serwera proxy w procesie A.
  10. Serwer proxy zwraca ten wynik do elementu wywołującego w procesie A.

Przypadki użycia Binder

Binder może być używany w różnych scenariuszach, w których musi dochodzić do komunikacji między oprogramowaniem w różnych procesach. Na przykład:

  • Aplikacja aparatu używa mechanizmu Binder do komunikacji z serwerem aparatu w innym procesie. Serwer aparatu używa następnie mechanizmu Binder do komunikacji z warstwą HAL aparatu w innym procesie.

  • Aplikacja używa mechanizmu Binder do komunikacji z serwerem systemowym w innym procesie. Serwer systemowy używa mechanizmu Binder do komunikacji z warstwami HAL w innych procesach.

  • Aplikacja w jednym procesie używa mechanizmu Binder do komunikowania się z inną aplikacją w innym procesie.

  • Demon systemowy odpowiedzialny za instalowanie, aktualizowanie i usuwanie aplikacji (installd) używa mechanizmu Binder do komunikacji z demonem środowiska wykonawczego Androida („artd”) w celu kompilowania aplikacji.