最近我读到Android
源代码,发现一对方法往往被称之为做一些当Binder
IPC调用。 我读了评论,但我不能清楚的知道的根本原因。 该对方法的是如下:
final long origId = Binder.clearCallingIdentity();
//other local method.
Binder.restoreCallingIdentity(origId);
没有人知道那是什么对法的功能? 这似乎涉及到权限。
最近我读到Android
源代码,发现一对方法往往被称之为做一些当Binder
IPC调用。 我读了评论,但我不能清楚的知道的根本原因。 该对方法的是如下:
final long origId = Binder.clearCallingIdentity();
//other local method.
Binder.restoreCallingIdentity(origId);
没有人知道那是什么对法的功能? 这似乎涉及到权限。
我不认为我能回答比官方的API的说明更好: http://developer.android.com/reference/android/os/Binder.html
public static final long clearCallingIdentity ()
重置当前线程传入的IPC的身份。 如果,在处理来电,您将在可能是本地的过程,需要做进入他们的调用权限检查(所以他们会检查自己的许可,其他对象的接口调用这可能是有用本地进程,并没有任何的过程原来叫你)。
虽然问题是旧的,它的价值将更多的细节,除了官方的方法介绍。
除了(或沿)IPC的关键作用, Binder
在框架Android
的安全性。
每一个Binder
事务中的身份调用进程(PID和UID)( 主叫 )运行,这样所谓的过程( 被调用者 )可以检查调用进程的权限,并决定是否可以执行请求的方法。
如果这样的交易必须根据被叫方的身份(临时)运行, 调用者的一个可以被清除后来与调用恢复Binder.clearCallingIdentity()
和Binder.restoreCallingIdentity(long)
分别。 在调用之间的被叫方的权限将被检查。
例如 ,考虑的系统服务(AOSP位置: /frameworks/base/services/java/com/android/server
)。 运行在system_server
过程中, UID=1000
,该服务能够以通过权限检查暂时清除来电者的身份。