質問は古いですが、公式のメソッドの説明に加えて、さらに詳細を記載する価値があります。
IPC とは別に (または IPC とともに)Binder
フレームワークの重要な役割Android
はセキュリティです。
各トランザクションは、呼び出しプロセス ( callerBinder
)の ID (PID および UID) の下で実行されるため、呼び出されたプロセス ( callee ) は呼び出しプロセスのアクセス許可を検査し、要求されたメソッドを実行できるかどうかを判断できます。
このようなトランザクションを呼び出し先のIDで (一時的に) 実行する必要がある場合は、呼び出し元のトランザクションをクリアし、後でそれぞれBinder.clearCallingIdentity()
および を呼び出すことで復元できますBinder.restoreCallingIdentity(long)
。呼び出しの間に、呼び出し先の権限がチェックされます。
例として、システム サービス (AOSP の場所: /frameworks/base/services/java/com/android/server
) を考えてみましょう。system_server
プロセスで実行中のサービスは、パーミッション チェックに合格するために、発信者のUID=1000
ID を一時的に消去できます。