Hermes跨进程通信原理解析

简述

EventBus是事件总线,用来处理一些事件及时通知的,用来处理UI或数据。
但是是单进程的,不能跨进程;说到跨进程就避不开binder通信。

Hermes就是快进程版本的EventBus;如果了解Binder的话那理解起来应该很简单,就是基本思路不变,然后在这个基础上通过binder通信。

Hermes是出于一个单例类来做整体处理的,通知也是调用这个单例类的某个方法,然后在方法中怎么通知到具体的东西,你就可以继续按照EventBus的思想继续操作了。

说一下“破解版”的思路。

看视频课讲解,没有自己去扒一遍;整理了一下思路和方案逻辑,觉得讲的思路是完全行得通的。

在A进程中注册一个单例类(用接口的方式),搜集类的全限定名,以及对应的所有方法,放到集合中缓存。

然后在B进程中,通过aidl来绑定A进程中的Service,这样就有了跨进程通信的能力。

然后在B进程中拿到A进程中的单例,把单例对应的类的全限定名和方法名binder发过去;A进程中收到后解析对应的类的全限定名和方法,然后反射执行获取单例,然后将单例对象保存在A进程中的一个集合中。

然后在B进程通过动态代理的方式生成一个新的对象给B持有;这时B就可以调用A中单例的某个方法了。(这里的动态代理就是个假动作,并没有发挥出动态代理的作用,就只是生成个句柄供B调用某个单例方法的时候方便;其实可以写个方法,里面就放类的全限定名,然后放方法名以及参数也是可以的

此时B中调用A中单例的某个方法,参数啥的都带上,binder发过去;A中收到后解析出对应的类的全限定名和方法名,之前集合中存储了单例类的对象,于是可以直接反射执行该方法。

至于如何在这个单例方法中去响应类似EventBus的作用,在Activity/Fragemnt中响应更新UI或者数据,可以再捡起EventBus中的那一套,也用集合去缓存所有的注解方法,然后反射执行对应的方法,只不过是多了一层中转。


等完成自己的规划,再去扒一边,看是不是差不多,顺带看看细节。

你可能感兴趣的:(Hermes跨进程通信原理解析)