From 32a16c95dc7626acf603154eb1376d4365e9ae09 Mon Sep 17 00:00:00 2001 From: Nicole L Date: Wed, 26 Feb 2025 09:17:22 -0800 Subject: [PATCH] Add note about AIDL methods taking `&self` (#2641) --- src/android/aidl/example-service/service.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/android/aidl/example-service/service.md b/src/android/aidl/example-service/service.md index 4081cfb9..c99935d2 100644 --- a/src/android/aidl/example-service/service.md +++ b/src/android/aidl/example-service/service.md @@ -23,6 +23,15 @@ _birthday_service/Android.bp_: - Point out the path to the generated `IBirthdayService` trait, and explain why each of the segments is necessary. +- Note that `wishHappyBirthday` and other AIDL IPC methods take `&self` (instead + of `&mut self`). + - This is necessary because binder responds to incoming requests on a thread + pool, allowing for multiple requests to be processed in parallel. This + requires that the service methods only get a shared reference to `self`. + - Any state that needs to be modified by the service will have to be put in + something like a `Mutex` to allow for safe mutation. + - The correct approach for managing service state depends heavily on the + details of your service. - TODO: What does the `binder::Interface` trait do? Are there methods to override? Where source?