关于事件总线框架EventBus和otto一些分析总结

今天上午研究了一下otto,遇到了一个很奇怪的问题,参照官网上的列子把otto的注销写在fragment中的onPause()中,发现其他fragment就接受不到值了,

而写在onStop()或者onDestory()中就没问题。

而且还发现一个问题,otto在活动之间传值,界面跳转方面用起来不是那么方便。参照网友的做法自己写了个列子


没错你没看错,就是设置activity的主题透明。通过这种方法,绕过avtivity1的onstop(),保留Bus没有注销掉;(在activity走完subscribe,执行activity1的onstop())


原因就在于otto传值的时候,需要注册了Bus,并且没有被注销,也就是说大家都拥有bus,形象的说就是大家都在一辆公交车bus才可以互相交谈,

这样才可以在组件之间互相传值

发现这点缺陷后,笔者也没深入研究,而是转向了eventBus,这个最大的事件总线框架果然没令人失望

eventBus使用起来也是很简单的,首先一上来便解决了笔者关于界面传值的问题

关于最几基本的使用,笔者就不啰嗦了,网上一大堆基础教程

这里首先强调一下关于threadModle的四种线程用法

其次,有个点也说下

EventBus的注册和注销与他的subscribe方法是结合一起的,缺一不可

而eventBus的发送是单独发送的,不需要注销,注册

其中发送有两种方式

post()和postSticky()俩种方式,post()是常规的,postSticky()是粘性发送,此方法完美解决了上文activity传值的尴尬

postSticky()粘性发送,是可以允许发送目标去的activity尚未在栈中,当此activity创建后,eventBus注册成功,即可在申明subscribe的方法中取到值(通俗讲就是Intent跳转新界面传值)

使用postSticky不要忘了Subscribe申明方法的时候 sticky=true(随上图)







发布了7 篇原创文章 · 获赞 1 · 访问量 5160
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览