您的位置:首页 > 其它

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

2017-03-29 16:21 302 查看
今天上午研究了一下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(随上图)


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: