src/android/aidl/example-service/server.md
Finally, we can create a server which exposes the service:
birthday_service/src/server.rs:
# // Copyright 2024 Google LLC
# // SPDX-License-Identifier: Apache-2.0
#
{{#include ../birthday_service/src/server.rs:main}}
birthday_service/Android.bp:
{{#include ../birthday_service/Android.bp:birthday_server}}
The process for taking a user-defined service implementation (in this case, the
BirthdayService type, which implements the IBirthdayService) and starting it
as a Binder service has multiple steps. This may appear more complicated than
students are used to if they've used Binder from C++ or another language.
Explain to students why each step is necessary.
BirthdayService).Bn* type (BnBirthdayService
in this case). This type is generated by Binder and provides common Binder
functionality, similar to the BnBinder base class in C++. Since Rust
doesn't have inheritance, we use composition, putting our BirthdayService
within the generated BnBinderService.add_service, giving it a service identifier and your service object
(the BnBirthdayService object in the example).join_thread_pool to add the current thread to Binder's thread pool and
start listening for connections.