Activity对象与Service对象在不同的进程(Process)里执行,各有不同的UID(unix user ID)。由于各自独立执行,所以Activity对象通常依赖Intent对象去请求Android启动所需要的Service。
就Service对象的开发者而言,Activity对象是属于外界(因为两者在不同的进程里执行)的软件,也大多是别人开发的。那么,Service对象如何确定这外来的对象是善意的呢? 这就是安全性的问题了。在Service类别里,可以做权限的检查,其常用指令如下图:
当Service确认了对方的善意,就将IBinder接口的参考 (Reference)传给Activity对象。Activity对象就能透过IBinder接口去使用Binder的服务了。如下图:
当Activity呼叫IBinder的transact()等函数时,会反向呼叫NotifyBinder子类别的onTransact()函数。此时,也可以进行安全检验,例如下图里的指令:
int uid = Binder.getCallingUID();
就能取得对方UID来检验它的身分等。还可以进行 checkCallingPermission()等检验。如下图:
经检验而确认来客是善意的,就启动BinderServer(如影音播放器)来提供实质的服务。
以上是就Service的开发者角度来看Android的IBinder的安全机制的有关概念。至于Android范例程序代码,在此节录文章里,就省略了。
转自http://dev.chinamobile.com/cmdn/wiki/index.php?doc-view-2411.html
- 大小: 42.1 KB
- 大小: 22.5 KB
- 大小: 30 KB
分享到:
相关推荐
### Android 13 的 IBinder 接口及其安全性机制 #### IBinder 接口简介 在 Android 开发中,为了实现跨进程通信(IPC),Android 提供了一个核心接口——`IBinder`。这个接口允许不同进程中的应用组件(如 ...
1. `transact()`:这是IBinder接口中的核心方法,用于执行跨进程的方法调用。`transact()`接收两个参数:一个是远程方法的ID(通过BinderProxy调用的本地方法会自动转换为远程方法ID),另一个是包含参数的Parcel...
13.Android的IBinder接口及其安全性机制.doc 14.Activity之间的Inter-process沟通.doc 15.从应用框架角度看ListView与Adapter类别.doc 16.善于设计自己的Listener来进行沟通.doc 17.如何使用SurfaceView计时绘点或线...
13.Android的IBinder接口及其安全性机制 14.Activity之间的Inter-process沟通 15.从应用框架角度看ListView与Adapter类别 16.善于设计自己的Listener来进行沟通 17.如何使用SurfaceView计时绘点或线 18.从...
- 安全性:Binder机制提供了权限控制,确保只有授权的进程才能访问特定服务。 - 效率:由于Binder机制在内核层进行数据复制,减少了不必要的上下文切换,提升了性能。 - 异步通信:Binder支持同步和异步调用,能...
与其他IPC机制相比,Binder具有更低的开销,支持对象的远程调用,并且具备良好的安全性。Binder机制由服务端、客户端、以及一个中间代理——Binder驱动共同构成。 二、Binder组件 1. 服务端:通常是一个运行在其他...
为了确保应用程序的安全性和稳定性,Android将每个应用运行在一个独立的进程中,并且默认情况下这些进程之间是相互隔离的。因此,进程间的通信对于实现复杂的功能变得至关重要。 #### 二、核心概念 - **IBinder...
1. **IBinder接口**:这是所有Binder对象的基础接口,定义了Binder的基本行为。 2. **BBinder类**:继承自IBinder,为Binder提供了基础实现。 3. **BpBinder类**:表示远程端的Binder对象。 4. **BnBinder类**:表示...
**安全性与权限控制** Binder提供了权限控制机制,服务可以声明需要的权限,只有拥有相应权限的客户端才能连接和服务进行通信。例如,通过在AndroidManifest.xml中添加标签来声明所需的权限。 **线程管理** 由于...
Android系统设计时,每个应用运行在自己的进程中,为了保护应用间的隔离性和安全性。但有时我们需要让一个应用调用另一个应用的服务或共享数据,这就需要进程间通信。Aidl便是Android为解决这一问题而提供的工具之一...
在Android中,由于安全性和资源管理的需要,各个应用程序运行在各自的进程中。Binder机制使得不同进程间的对象可以相互通信,如同在一个进程中一样。Binder主要由以下几个关键类构成: 1. IBinder:这是所有跨进程...
下面将详细阐述Android接口的主要知识点及其在实际开发中的应用。 1. **接口的定义与使用** 在Java中,接口是完全抽象的类,它只能包含常量和抽象方法。在Android中,接口常用于实现组件间的通信,如Activity和...
1. **创建.aidl文件**:在项目的`src/main/aidl`目录下创建一个.aidl文件,例如`IAidlInterface.aidl`,并在其中定义接口及其方法。 2. **定义数据类型**:AIDL支持基本数据类型,如int、String等,以及自定义的...
在Android中,由于安全性和资源管理的原因,默认情况下,应用程序的组件运行在同一个进程中,而AIDL则打破了这一限制,使得跨进程通信成为可能。 在AIDLServer中,我们首先会定义一个.aidl文件,例如`...
3. **安全性**:传统的IPC机制可能因权限控制不严格而存在安全隐患。而Binder通过对进程间的交互进行了严格的权限控制,有效避免了潜在的安全问题。 4. **资源管理**:Binder机制能够更好地管理资源。例如,它可以...
- 接口定义:在`.aidl`文件中,声明接口及其方法,参数类型必须是Android支持的基础类型、Parcelable对象或者其他的AIDL接口。 - 参数传递:AIDL支持基本数据类型、数组、List、Map等,但对象必须实现Parcelable...
服务端通过实现IBinder接口创建服务,客户端通过AIDL(Android Interface Definition Language)来定义接口并调用服务端的方法。 2. **创建本地服务** 创建本地服务通常涉及到以下步骤: - 定义服务类:继承自`...
在AIDL中,我们可以声明接口及其方法,定义参数类型和返回值。编译器会根据AIDL文件生成对应的Java接口和类,使得客户端和服务端都可以理解和使用这些接口。AIDL的作用在于,它能生成边界类,允许服务端和客户端在...
此外,Binder机制确保了进程间的安全性,因为它能获取和验证对方的UID/PID,从而确认身份。 Binder通信的核心在于减少数据拷贝次数,提高了传输性能。传统的IPC通信需要在用户空间和内核空间之间进行两次数据拷贝,...