Binder de Android que borra la identidad del llamante
Recientemente he leído los códigos fuente de Android
y encontrar que un par de métodos siempre se llaman al hacer alguna llamada Binder
IPC. He leído el comentario, pero no puedo conocer claramente la razón raíz. El par de método es como sigue:
final long origId = Binder.clearCallingIdentity(); //other local method. Binder.restoreCallingIdentity(origId);
¿Alguien sabe cuál es la función de ese par de método? Parece referirse al permiso.
- Carpeta java de Java ¿TRANSACCIÓN DE BINDER FALLA?
- Cómo guardar las fotos tomadas en una carpeta específica?
- Detectar la carpeta de la cámara Android
- ¿Cómo escuchar dev / binder?
- Guardar imagen de la cámara de Android en la carpeta personalizada
- Cómo manejar: java.util.concurrent.TimeoutException: android.os.BinderProxy.finalize () tiempo de espera después de 10 segundos de errores?
- ¿Cómo notificar correctamente a MediaScanner sobre una carpeta, incluso en dispositivos Nexus / Kitkat?
- Transferir InputStream a otro servicio (a través de límites de proceso) con ParcelFileDescriptor.createPipe () falla con "EBADF (número de archivo incorrecto)"
- Pasar objetos activos entre servicios a través de AIDL
- Descriptor de archivos compartidos con la carpeta de Android
- En AOSP, donde se implementa el ServiceManager
- Convenciones de nomenclatura de carpetas para variantes de generación de grados
- No se reconoce la carpeta de Google Drive al descargarla en la aplicación de Android
No creo que pueda responder mejor que la descripción en las API oficiales: http://developer.android.com/reference/android/os/Binder.html
public static final long clearCallingIdentity ()
Restablezca la identidad del IPC entrante en el subproceso actual. Esto puede ser útil si, al manejar una llamada entrante, va a llamar a interfaces de otros objetos que pueden ser locales a su proceso y necesita hacer verificaciones de permisos en las llamadas que entran en ellos (por lo que comprobarán el permiso de su propio Proceso local, y no cualquier proceso originalmente llamado usted).
Aunque la pregunta es antigua, vale la pena poner más detalles además de la descripción oficial del método.
Aparte de (o junto con) IPC el papel clave del marco Binder
en Android
es la seguridad.
Cada transacción Binder
ejecuta bajo la identidad (PID y UID) del proceso llamante ( llamante ) para que el proceso llamado ( callee ) pueda inspeccionar los permisos del proceso llamante y decidir si se puede ejecutar el método solicitado.
Si tal transacción necesita ser (temporalmente) ejecutándose bajo la identidad de la persona que llama , la persona que llama puede ser borrada y restaurada más tarde con las llamadas a Binder.clearCallingIdentity()
y Binder.restoreCallingIdentity(long)
respectivamente. Entre las llamadas se verificará el permiso del receptor .
Como ejemplo, considere los servicios del sistema (ubicación AOSP: /frameworks/base/services/java/com/android/server
). Ejecutándose en el proceso system_server
, UID=1000
, los servicios pueden borrar temporalmente la identidad de la persona que llama para pasar las comprobaciones de permisos.
- Pasar datos a Fragmento añadido – IlligalStateException: Fragmento ya activo
- ¿Puedo desarrollar aplicaciones para Android usando Eclipse IDE para Java EE?