这两天对Otto进行了一个简单的调研,发现官网特别简单差点儿没东西,github上给的sample也不是非常好。网上的技术博客也差点儿千篇一律,我就把自己的心得体会写下来吧,如有缘者看见望其少走弯路。

大家都知道这是一个公布者/订阅者模式,也都知道@Produce使用来注冊一个须要公布的方法,可是我在实际应用中却从来没用到过@Produce,仅仅须要定义一个事件,在须要公布的是好post一下这个事件,然后在须要接收这个消息的Activity或Fragment中@Subscribe一下即可了。详细就三步。

第一步,构造一个event事件。须要传递的參数放在构造方法中。比如:

public class TextChangeEvent {
public final String s; public TextChangeEvent(String s) {
this.s = s;
} @Override
public String toString() {
return this.s;
} }

第二步,在须要公布消息的地方用post公布,post的參数是一个event的实例。new一个出来就OK了:

        findViewById(R.id.btn1).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) { BusProvider.getInstance().post(new TextChangeEvent("注冊呢"));
AnotherActivity.this.finish(); }
});

第三步,在须要接收消息的界面用@Subscribe接收一下就能够了:

    @Subscribe
public void onTextChanged(TextChangeEvent event) {
text.setText(event.toString());
Log.v("cat", event.toString());
}

到这里就完毕了一个从消息公布。在总线中传递,再到须要接收的地方被接收处理的过程,当中有几点须要注意的:

1 、Otto推荐使用单例模式。即仅仅有一个Bus实例,那么我们就构造一个BusProvider:

import com.squareup.otto.Bus;

public class BusProvider {

    private static final Bus BUS = new Bus();

    public static Bus getInstance() {
return BUS;
} private BusProvider() { }
}

2 、Otto的github上给的样例是在一个Activity的onResume()方法中对Bus注冊自己,在onPause()方法中取消注冊,我认为在实际应用中。一个界面假设不再前台那么它假设也须要接收消息那么就将取消注冊的方法放在onDestroy()中,这样能防止在界面进入Pause状态时取消注冊:

    @Override
protected void onDestroy() {
super.onDestroy();
BusProvider.getInstance().unregister(this);
}

恩,Otto很easy好用的总线模式。用注解的方法就能够完毕消息的公布和接收,尽管性能要比EventBus差一点,可是假设胜在代码简洁、逻辑清晰,那么损失一点性能也是能接受的,毕竟那一点性能对如今的CPU根本不算什么。

最新文章

  1. HQL查询——from子句
  2. 使用简单NGUI加载进度条
  3. linux环境变量查看及修改
  4. RESTful 杂文归集
  5. 微软官方的一段JavaScript判断.net环境
  6. 关于composer
  7. birt 运行环境搭建(部署到tomcat)
  8. Servlet基础知识(四)——Servlet过滤器Filter
  9. Tesseract-OCR使用记录
  10. Java Web - HTML 常用标签和符号
  11. Java 跨平台原理
  12. lamba匿名函数与内置函数/递归
  13. ajax 与jsp servlet
  14. Java代码质量改进之:同步对象的选择
  15. 【iCore4 双核心板_ARM】例程四:USART实验——通过命令控制LED
  16. DevExpress WPF v18.2新版亮点(七)
  17. 010.MySQL-Keepalived搭配脚本04
  18. eclipse Maven项目Context root 为空,不能修改
  19. 010-centos上安装matlab
  20. POJ 2243

热门文章

  1. PowerShell攻防进阶篇:nishang工具用法详解
  2. suse linux通过iso文件安装gcc
  3. 【联系】二项分布的对数似然函数与交叉熵(cross entropy)损失函数
  4. php添加文件到压缩文件夹
  5. Hdu-5992 2016ACM/ICPC亚洲区青岛站 K.Finding Hotels KDtree
  6. 一个域名如何解析到多个ip地址
  7. .net core虚拟目录配置
  8. Blender Python UV 学习
  9. RawURL
  10. vue 子组件向父组件传值通信