使用HermesEventBus的一些坑

HermesEventBus一个基于EventBus的、能在进程间发送和接收event的库,在IPC或者插件开发中非常有用。

在这里我打算记录一下自己使用HermesEventBus碰到的坑。先上HermesEventBus的使用链接。

Github地址:HermesEventBus

我参考的HermesEventBus地址:HermesEventBus

新司机可以先看一下怎么操作。

碰到的第一个坑就是没有理解接受与发送的参数(EventMessage)唯一的不同点是存在于两个不同的APP当中,其他的类名,包名,方法名全要一致才可以正常调用。类名和方法名一致好办,直接复制粘贴,就是这个包名一致搞了我好久,一直到查看了demo才发现,原来是这样。


使用HermesEventBus的一些坑

一开始我是把EventMessage建立在com.example.administrator.gamemenu底下,也就是与Activity在同一级目录下,发现怎么调试都出错。一直到查看了别人写的Demo才发现,如果把EventMessage建立在com.example.administrator.gamemenu底下,他的包名是:com.example.administrator.gamemenu.bean,所以导致EventMessage的包名不一致无法调用。要把EventMessage建立在java文件夹底下,与com.example.administrator.gamemenu处于同一级目录这样一来,包名就是bean,就达成了包名也一致的条件了。这个小细节没有注意到,折腾了好久好久。气哭了。。。

下面来说说我碰到的第二个坑。假设我们的A应用和B应用可以进行通信了。然后,我们还可以通过A应用来启动B应用(B应用更加像一个A应用的插件)。现在我们的B应用要进行版本更新啦,我们在A应用界面点击B应用,B应用自动进行下载,安装。当在进行安装的时候,也就是在这个界面

使用HermesEventBus的一些坑

我们当然要点安装啦。不点没事,一点就发现,在A应用的控制台打印了这样的一句话:
Error occurs.Error 2:Service Unavailable:Check whether you have connected Hermes.
WTF?什么鬼,暂时忽略它。安装完毕以后,打开B应用,发现,B应用接受不到A应用发来的消息了。并且
A应用每发一条消息,就会在控制台打印:HermesEventBus: Hermes service disconnected! 
瓦特?服务中断?哇,看来之前的那个错误不能忽略啊。然后,我各种百度查,全都是HermesEventBus的介绍使用。。。[吃瓜][吃瓜][吃瓜]为什么不google?别说了,*软件出问题了[跪了][跪了]
然后我就想,不点击安装就没事,点击安装就报异常,那么我们在点击安装之前 finish掉A应用是不是就可以了?试了一下,果然是这样。就是在下载B应用完毕以后,调用安装的方法之后,就调用MainActivity.this.finish();
这样一来,安装完毕B应用,重新打开A应用,再打开B应用,发现,诶,B应用接收到了A应用发送的消息诶。
或许有人会问,等B应用安装完以后,我在按返回键退出A应用再进不行吗?是的!不行!还是会出现:HermesEventBus: Hermes service disconnected!  好像放着不管,过一会,再打开A应用和B应用,发现又可以通信了,这就很怪。因为一开始没有想到一开始就直接finish掉A应用,一直在琢磨为什么过一段时间又可以通信了,想着开个独立进程之类的,发现还是没用(可能是我弄不来),反正折腾了很久,最后换了一下思路就想到了finish A应用这个方法。唉,这个故事告诉我们:换一种思路去思考问题,说不定其实很简单,或许也就是一行代码的事。。。

以上所说的A应用和B应用在我的Demo里面分别是:GameMenu和GameMenuA。不要被第二张截图给误导了。。。以为GameMenuA是A应用。
最后,我要吐槽下,百度搜一波:HermesEventBus,全tm是教程,卧槽,有必要吗!!!有必要吗!!有必要吗!