# HermesEventBus **Repository Path**: renhui112115/hermes-event-bus ## Basic Information - **Project Name**: HermesEventBus - **Description**: 基于AIDL实现的跨进程通信,并集成EventBus实现跨进程实现总线。 (手写实现) - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2020-11-27 - **Last Updated**: 2022-05-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README [TOC] #### 一、基础AIDL实现Binder跨进程通信实现思路 声明AIDL,主要是基础的**方法接口**和适用用于Server端和Client端的**通讯对象**。 服务端声明Service. 实现在AIDL方法接口声明的方法接口。 客户端通过ServiceConnection获取Binder,并通过代理模式获得的Service进行方法调用,进而实现客户端与服务端的通信。 #### 二、使用AIDL进行Binder跨进程通信的进阶思路 平常我们写AIDL时对于每个数据其实都得要写一个AIDL文件,比如方法中涉及到多个对象,比如Student、Friend、Teacher...,每个都得对应一个独立的AIDL,很显然不是特别方便。 基于此问题,我们可以考虑对其进行封装,这样我们只需要定义一次,之后我们 在从客户端调用AIDL往服务端发时,不会再增加AIDL文件. 这里可以参考 xiaofei.library.hermes 里面的使用方式: ```java private final IHermesService.Stub mBinder = new IHermesService.Stub() { @Override public Reply send(Mail mail) { try { Receiver receiver = ReceiverDesignator.getReceiver(mail.getObject()); int pid = mail.getPid(); IHermesServiceCallback callback = mCallbacks.get(pid); if (callback != null) { receiver.setHermesServiceCallback(callback); } return receiver.action(mail.getTimeStamp(), mail.getMethod(), mail.getParameters()); } catch (HermesException e) { e.printStackTrace(); return new Reply(e.getErrorCode(), e.getErrorMessage()); } } @Override public void register(IHermesServiceCallback callback, int pid) throws RemoteException { mCallbacks.put(pid, callback); } @Override public void gc(List timeStamps) throws RemoteException { OBJECT_CENTER.deleteObjects(timeStamps); } }; ``` #### 三、Hermes实现的技术思路 1. 服务端注册 2. 客户端连接 3. 通信实现