记一次EventBus内存泄露导致的项目问题

Preface

今天遇到一个很尴尬的问题,就是EventBus的使用过程中,在post一个Event后,于此同时,在接收Event的方法中打断点监控Event的接收。

这个时候我遇到很尴尬的问题,会重复接收到很多次的Event事件= =

我当前所用的开发框架是支持将业务,数据更新,视图更新从Activity中抽离,在Activity实例化的时候使用反射的方式创建对应的业务Controller,然后Controller的生命周期将全程与Activity的生命周期绑定,整体的想法和Fragment一致,其实挺棒的。
但是最近写相关框架的老大比较忙,其实这个框架还能编的更棒,明明可以在Controller上面进一步绑定Controller,这样一来,能达到将行为进一步抽离的目的= =,嘛嘛,事物永远不可能刚开始就极其完美,这才有不断改进的空间。

那么就是因为框架使用习惯了,而且我一直想在Controller上面套Controller,结果就造成我以为现在的框架已经支持Controller之间互相嵌套的错觉= =。

Solution:

EventBus并没有及时unregister对应的Subscriber,因为EventBus对订阅者管理采用的是强引用列表的方式,所以如果你会手动调用解绑方法,对象将会一直储存在内存中,进而导致内存泄露。在适当的位置手动调用解绑方法就能解决这个问题了。
我这里出现这样的问题的根本原因就是将解绑操作写到了onDestroy内,因为我之前说过了,onDestroy的调用是通过框架自动完成的,但是这里这种情况,框架并不会自动调用对应的方法,所以对于事件Event依然会响应,就出现了重复接收多次的结果。

©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页