`
king_tt
  • 浏览: 2234610 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

【内核研究】Binder服务端设计

 
阅读更多

设计Server端很简单,从代码的角度来讲,只要基于Binder类新建一个Server类即可。以下以设计一个MusicPlayerService类为例。

假设该Service仅提供两个方法:start(String filePath)和stop(),那么该类的代码可以如下:

public class MusicPlayerService extends Binder {
    @Override
    protected boolean onTransact(int code, Parcel data, Parcel reply, int flags) throws RemoteException {
        return super.onTransact(code, data, reply, flags);
    }

    public void start(String filePath) {

    }

    public void stop() {
        
    }
}

当要启动该服务时,只需要初始化一个MusicPlayerService对象即可。比如可以在主Activity里面初始化一个MusicPlayerService,然后运行,此时可以在ddms中发现多了一个线程,如图所示。


如果不创建MusicPlayerService,则只有2个Binder对象对应的线程。

http://blog.csdn.net/manoel/article/details/39500351

定义了服务类后,接下来需要重载onTrasact()方法,并从data变量中读出客户端传递的参数,比如start()方法所需要的filePath变量。

然而,这里有个问题,服务端如何知道这个参数在data变量中的位置?因此,这就需要调用者和服务者双方有个约定。

这里假定客户端在传入的包裹data中放入的第一个数据就是filePath变量,那么,onTransact()的代码可以如下所示:

        switch (code) {
            case 1000:
                data.enforceInterface("MusicPlayerService");
                String filePath = data.readString();
                start(filePath);
                // replay.writeXXX();
                break;
        }

code变量用于标识客户端期望调用服务端的哪个函数,因此,双方需要约定一组int值,不同的值代表不同的服务端函数,该值和客户端的transact()函数中第一个参数code的值是一致的。这里假定1000是双方约定要调用start()函数的值。

enforceInterface()是为了某种校验,它与客户端的writeInterfaceToken()对应。

readString()用于从包裹中取出一个字符串。取出filePath变量后,就可以调用服务端的start()函数了。

如果该IPC调用的客户端期望返回一些结果,则可以在返回包裹reply中调用Parcel提供的相关函数写入相应的结果

分享到:
评论

相关推荐

    Android内核剖析之Binder

    【Android内核剖析之Binder】 Binder是Android系统中核心的组件之一,它是实现Android进程间通信(IPC)的关键机制。它的名字来源于英文单词"别针",象征着它能够连接和协调不同进程间的通信,就像别针将多张纸张...

    Android Binder设计与实现

    Binder通信协议定义了客户端和服务端之间交互的数据格式和流程。主要包括: - **Parcel:** 一种数据容器,用于序列化和反序列化对象。 - **Transaction:** 描述了一个请求-响应的过程,包括数据传输和处理逻辑。 -...

    Binder设计与实现

    Binder引入了身份验证机制,每个进程都有唯一的UID/PID,数据包在传输时会附带发送方的UID/PID,接收方可以在内核级别验证,增强了安全性。此外,Binder支持实名和匿名通信,实名Binder提供明确的访问控制,而匿名...

    android通信机制binder实例

    3. Binder驱动:在内核层,负责管理Binder通信的底层实现,包括消息传递、线程调度等。 三、Binder通信流程 1. 创建服务:服务端通过AIDL(Android Interface Definition Language)定义接口,并实现接口类。 2. ...

    binder原理

    Binder 的设计使得不同进程间的对象能够像在同一进程中那样进行通信,从而提供了高效且轻量级的远程过程调用(Remote Procedure Call, RPC)功能。本文将深入探讨 Android Binder 的工作原理及其内核中的实现细节。 ...

    Android binder_test

    Binder是Android系统内核中的一个组件,它为应用程序提供了安全、高效的IPC方式。在Binder机制中,服务端(Server)运行在一个独立的进程中,而客户端(Client)则通过Binder接口与其通信。当客户端调用服务端的...

    android中binder设计与实现

    数据通过Parcel对象进行序列化和反序列化,服务端和客户端之间的方法调用则通过Binder接口的实现进行。 Binder通信协议允许跨进程的异步调用,支持回调和结果返回,使得远程调用如同本地调用一样简单。 **3. Binder...

    android binder架构

    Android Binder架构是Android系统中用于进程间通信(IPC)的一种机制,其设计目的是为了提供一种高效的、稳定的方式在不同的进程之间传输数据。Binder架构由一个轻量级的远程过程调用(RPC)机制实现,它将数据封装成...

    Deep Dive into Android IPC-Binder Framework

    Binder的设计和实现来源于OpenBinder项目,最初是由Be公司作为“下一代BeOS”开发的一部分。后来,PalmSource收购了Be公司,并在Palm Cobalt(一个基于微内核的操作系统)中首次实现了Binder。当Palm转向使用Linux...

    Binder笔记

    5. Binder对象和引用:Binder对象是指服务端提供的具体服务,而Binder引用是指客户端对服务对象的引用。Binder对象可以是任意复杂度的对象,通过Binder引用,客户端可以远程调用服务端的方法。 Binder机制的通信...

    Android的IPC机制-Binder

    3. **简洁性**:Binder的设计较为简单明了,易于理解和实现。 4. **统一性**:Binder机制不仅适用于C/C++环境,还适用于Java环境,使得整个Android平台的IPC机制更加统一和一致。 #### Binder机制的关键组成部分 -...

    android 的binder机制在java、c++层的实现

    1. **Binder驱动**:内核空间中的Binder驱动负责处理来自用户空间的Binder操作,包括建立连接、发送和接收数据、处理事务等。 2. **ServiceManager**:在C++层,`ServiceManager`负责管理所有服务的注册和查找,...

    android binder 简单实例

    Binder是Android系统内核中的一个组件,它充当了进程间通信的桥梁。与其他IPC方式相比,Binder具有高效、安全和可管理性等优点。在Android中,许多系统服务,如Activity Manager、Content Provider等,都是通过...

    Binder工作机制

    Binder驱动程序位于内核空间,负责进程间的通信。 6. **服务端接收**:服务端的Binder线程接收到Parcel数据后,反序列化并调用对应的服务端实现类的方法。这里的实现类通常由AIDL生成,继承自IBinder。 7. **执行...

    binder例子

    3. Binder Driver:位于Linux内核层,负责Binder的调度和数据传输。 4. System Server:Android系统服务,负责管理所有的Binder连接和服务注册。 三、C++实现Binder 1. 创建Binder类:在C++中,我们需要继承自...

    Android Binder机制完全解析

    5. Binder驱动:位于内核层,负责管理Binder通信的管道,处理数据传输和线程调度。 三、Binder工作流程 1. Client通过AIDL(Android Interface Definition Language)定义接口,并生成Java代码。 2. Server实现接口...

    Android Binder

    尽管如此,Android系统依然引入了Binder作为其主要的IPC方式,这反映了Binder在设计上的一些独特优势。 在讨论Binder的设计细节前,我们需要明确Binder通信模型和协议。Binder通信模型基于Client-Server架构,也...

    Android进程间通信机制(Binder)介绍

    - **Binder驱动**:运行在内核空间,负责管理用户空间中的Binder实体,并处理它们之间的通信请求。 - **Binder代理**:每个Binder对象在其他进程中都有一个代理对象,用于代表远端的Binder实例。 #### 3. 示例解析 ...

    Android核心剖析之Binder

    设计服务端主要涉及创建继承自Binder类的自定义服务类,例如设计一个`MusicPlayerService`类,提供`start(String filePath)`和`stop()`两种服务。服务端需要重写`onTransact()`方法,解析客户端传入的`Parcel`数据,...

Global site tag (gtag.js) - Google Analytics