Android 解耦方法 ~~~ 事件总线
2016-09-17 13:03
309 查看
一.它简化了Activity、Fragment、Service等组件之间的交互,很大程度上降低了它们之间的耦合,使我们的代码更加简洁,耦合性更低,提升了我们的代码质量。
二.设计模式:观察者模式。
三.使用场景:你是否在开发的过程中遇到过从Activity-A跳转到Activity-B,然后需要在Activity-B处理完某些工作之后回调Activity-A中的某个函数,但Activity又不能手动创建对象来设置一个Listener的情况?或者遇到在某个Service中更新Activity或Fragment中的界面等组件之间的交互问题……
, 那么这时就是使用事件总线的好时机。(看具体情况)
四.具体使用方式:
1>.
导入jar包(androideventbus-1.0.5.jar)
2>.注册对象
打印日志:
以上是订阅函数没有Tag的形式,有Tag的形式
注意事项:
1.注册函数只能有一个参数,否则不会调用(解决方法,定义一个实体类,将想要的参数,传递)
2.在没有tag时,注册函数参数类型
及其类型的父类,会被调用
3.再有tag时,无论参数类型什么,只要tag一致,那么都会被调用。
4.想调用某对象里的订阅函数,那么这个对象一定要注册。
5.在这个对象销毁时,一定要要取消对象的注册。如在Activity中,我们可以在onDestroy()中
二.设计模式:观察者模式。
三.使用场景:你是否在开发的过程中遇到过从Activity-A跳转到Activity-B,然后需要在Activity-B处理完某些工作之后回调Activity-A中的某个函数,但Activity又不能手动创建对象来设置一个Listener的情况?或者遇到在某个Service中更新Activity或Fragment中的界面等组件之间的交互问题……
, 那么这时就是使用事件总线的好时机。(看具体情况)
四.具体使用方式:
1>.
导入jar包(androideventbus-1.0.5.jar)
2>.注册对象
EventBus.getDefault().register(this);3>.使用@Subscriber 订阅函数
@Subscriber private void methodNoTag(String s) { Log.e("-----", "methodNoTag : " + s + " 线 程 -----> " + Thread.currentThread().getName()); }4>. 发布函数(在另一个对象中使用的)
EventBus.getDefault().post("我是时间总线");
打印日志:
E/-----: methodNoTag : 我是时间总线 线 程 -----> main
以上是订阅函数没有Tag的形式,有Tag的形式
@Subscriber(tag = "my_tag") private void methodHasTag(String s) { Log.e("-----", "methodHasTag : " + s + " 线 程 -----> " + Thread.currentThread().getName()); }在发布时要想调用带有tag的函数,则post时,必须要带有对应的tag
EventBus.getDefault().post("我是时间总线", "my_tag");
注意事项:
1.注册函数只能有一个参数,否则不会调用(解决方法,定义一个实体类,将想要的参数,传递)
2.在没有tag时,注册函数参数类型
及其类型的父类,会被调用
3.再有tag时,无论参数类型什么,只要tag一致,那么都会被调用。
4.想调用某对象里的订阅函数,那么这个对象一定要注册。
5.在这个对象销毁时,一定要要取消对象的注册。如在Activity中,我们可以在onDestroy()中
@Override protected void onDestroy() { EventBus.getDefault().unregister(this); super.onDestroy(); }最后附上 jar 下载地址
相关文章推荐
- Android事件分发机制源码分析
- EasyPlayer Android音频解码库(第二部分,封装解码器接口)
- android studio中选择器怎么创建
- Android事件分发拦截机制(图解)
- [置顶] Wiki_Android汇总
- 编译与制作android ROM
- Android 自定义控件之基础几何图形绘制详解
- [置顶] Android智能定位手表开发-目录
- android 商城左边菜单,右边联动
- Android 通过JNI实现守护进程
- Android实现滑动到顶部悬停的效果
- android进度条ProgressBar例子
- android查看联系人姓名和手机号码
- Android Studio中找到项目的密匙数字证书(MD5和SHA1)配置高德地图Android地图SDK【高德地图使用】
- Android ramdisk.img 分析、解压和压缩
- Android的支付密码输入框实现浅析
- android rom制作之bootimg的详细介绍和使用
- Android Fragment中嵌套Fragment,不显示view
- Android Menu菜单
- Android Studio新功能解析,你真的了解Instant Run吗?