这两天对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根本不算什么。

Android Otto调研的更多相关文章

  1. 想做一个整合开源安全代码扫描工具的代码安全分析平台 - Android方向调研

    想做一个整合开源安全代码扫描工具的代码安全分析平台 - Android方向调研 http://blog.csdn.net/testing_is_believing/article/details/22 ...

  2. Android Otto框架浅析

    今天要介绍的是一个Android中使用得比較多的android 事件总线 EventBus模式的一个框架Otto. Otto 官网:http://square.github.io/otto/ 一.An ...

  3. Mono for Android开发调研笔记

    安装完Mono for Android(简称:MonoDroid)之后,可以用MonoDevelop或Visual Studio来开发Mono for Android应用程序:目前只能在模拟器上调试和 ...

  4. 微信稳居Android App排行榜4月份国内榜首

    根据某机构通过对Android样本访问行为的持续监测数据进行样本属性加权并根据iOS/Android用户调研数据建模推总得出中国移动互联网用户规模以及相应的用户结构数据显示,2015年4月份国内And ...

  5. 【Xamarin挖墙脚系列:Mono项目的图标为啥叫Mono】

    因为发起人大Boss :Miguel de lcaza 是西班牙人,喜欢猴子.................就跟Hadoop的创始人的闺女喜欢大象一样...................... 历 ...

  6. 冰多多团队-第二次scrum例会

    冰多多团队-第二次Scrum会议 会议基本情况 会议时间:4月8日 19:00 - 19:30 会议地点:新主楼F座2楼沙发休息处 工作情况 团队成员 已完成任务 待完成任务 zpj Service实 ...

  7. 请各位帮帮忙:Android LBS应用——CityExplorer (v1.0) 调研

    Hello哇各位亲!! 请各位帮帮忙:Android LBS应用——CityExplorer(V1.0)调研 嗯,这个事情是这样的,要填一个调查问卷,但是问卷中部分问题是关于这个叫做CityExplo ...

  8. Android学习系列(43)--使用事件总线框架EventBus和Otto

    事件总线框架 针对事件提供统一订阅,发布以达到组件间通信的解决方案. 原理 观察者模式. EventBus和Otto 先看EventBus的官方定义: Android optimized event ...

  9. 作业一_随笔3_调研Android的开发环境的发展演变

    调研某一移动应用/平台的开发环境的发展演变:Android 其实,一开始,我只知道,苹果手机用IOS系统,其他很多手机时候安卓系统.我百度知道Android开发主要是android studio和Ec ...

随机推荐

  1. oc6--类方法

    // // main.m // 第一个OC类-类方法 #import <Foundation/Foundation.h> // 1.编写类的声明 @interface Iphone : N ...

  2. HP Z240组建磁盘阵列RAID1

  3. Gym-101915A Printing Books 模拟

    题面 题意:给你N,X,   X表示这本书从X开始编号,每个X是几位数,计数器就加几, 然后问你如果从X,开始编号,计数器为N的时候,翻了几页,不能刚好为N输出-1. (例如,5 99,答案为2,因为 ...

  4. java基本数据类型(二)和分支结构

    基本数据类型(四类八种):不能为null一.整数型 byte----2的8次方 short----2的16次方 int----2的32次方 long----2的64次方二.浮点型 float----4 ...

  5. H3BPM实例分享——金额规则大写

    v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VM ...

  6. 134. Gas Station leetcode

    134. Gas Station 不会做. 1. 朴素的想法,就是针对每个位置判断一下,然后返回合法的位置,复杂度O(n^2),显然会超时. 把这道题转化一下吧,求哪些加油站不能走完一圈回到自己,要求 ...

  7. WPF 漏斗控件 等待沙漏效果

    由于WPF中不支持gif图片因此要实现一个漏斗沙漏效果有点小麻烦. 网上有一款开源的控件 理论上完全开源 官网 http://wpfspark.codeplex.com/贴一下效果图 大家感觉需要就在 ...

  8. (转)Webpack2 + Vue2 + Vue-Router2 如何实现懒加载?

    webpack2 的中 System.import 方法将被弃用, 推荐改成以下写法: https://www.mmxiaowu.com/article/5848239bd4352863efb5546 ...

  9. 13.javaweb xml标签库详解

    一.XML标签简介 1,  作用 2,  标签分类 XPath 路径标记 查找节点元素示例 2.1<x:out> 2.2<x:parse> 操作示例:导入XML文件,解析,然后 ...

  10. 12.javaweb SQL标签库

    一.说明及使用 1,  首先要知道,开发中绝对不会SQL标签库在JSP中进行数据库操作,学习SQL标签库只是作为一个只是扩展 2,  SQL标签库分类 2.1<sql:setDataSource ...