Otto框架的使用

转载 2016年06月02日 10:09:19

转: Otto框架的使用


otto 框架就是事件分发总线.
otto 下载地址:http://square.github.io/otto/

1.0 为什么要使用事件分发总线?

事件分发总线可以降低多个类之间的耦合度的。
在 android 中 Fragment 对 Activity 的通信方式的 Interface 的方式,Activity 和 Activity 的值的回调是用 startActivityForResult()的方法.Fragment 和 Fragment中的通信是用 Interface 的方式...
现在有一个新的方式:使用事件分发总线.它可以替代这些操作,并且写法更加的简单.

2.0为什么要使用 otto 框架?与Eventbus 比较呢?

Eventbus是一个非常强大的一个框架,它采用的使用特定的方法名的方式接受消息.
就功能来讲, eventbus 也胜一筹,因为它定义了很多个操作类型,包括异步线程,主线程调用等.

之所以选择 otto, 而不使用 eventBus, 因为otto 使用注解的形式,注解更能被程序员识别.并且避免了因为拼写不正确导致的事件不起作用.

3.0.什么时候使用otto

在处理Fragment 和 Fragment的通信,Activity 和Fragment 的通信, Activity 和 Activity的通信...
在比较复杂的场景:
1.由界面 A 跳转到界面 B 再跳转到 界面C, 然后点击 C中的 button, 现在要更新 界面 A 和界面 B 的视图
2.界面有一个 界面 A,A 里面的有个 Fragment, 点击 Fragment 中的一个 button,跳转到界面 B, 点击界面 B的 button 要更新界面 A 的 Fragment 的视图.
可以看出上面举例的两种如果用startActivityForResult 和 interface 的方式实现的话,会比较麻烦,并且产生了很多的状态判断和逻辑判断,并且可能产生很多不必要的 bug, 使代码量变大,使用 otto 就可以能容易的避免这些.

4.0 主要方法

主要的方法有3个,够少吧.
register(Object o):注册,注册以后可以订阅事件
unregister(Object o)注销.放弃对之前的订阅的所有事件
post(Object o)发布事件,会被有Subscribe注解的方法获取到
注解:
@Subscribe:这个在调用了register后有效,表示订阅了一个事件,并且方法的用 public 修饰的.方法名可以随意取,重点是参数,它是根据你的参数进行判断
@Produce注解告诉Bus该函数是一个事件产生者,产生的事件类型为该函数的返回值。

5.0 otto 框架使用例子

现在我们的任务是界面 A 跳转到界面 B, 点击 B 的 button 更新 A 的视图.
首先我们要自行实现单例模式.
使用以下BusProvider.class类实现单例

/**
 * Maintains a singleton instance for obtaining the bus. Ideally this would be replaced with a more efficient means
 * such as through injection directly into interested classes.
 */
public final class BusProvider {
    private static final Bus BUS = new Bus();

    public static Bus getInstance() {
        return BUS;
    }

    private BusProvider() {
        // No instances.
    }
}

定义一个 class ,用于界面 B 要传递会界面 A 的参数

/**
 * Created by zzz40500 on 15/1/14.
 */
public class TestAction {


    private String str;

    public String getStr() {
        return str;
    }

    public void setStr(String str) {
        this.str = str;
    }
}

A.class

public class A extends ActionBarActivity {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        BusProvider.getInstance().register(this);

    }

    //这个注解一定要有,表示订阅了TestAction,并且方法的用 public 修饰的.方法名可以随意取,重点是参数,它是根据你的参数进行判断
    @Subscribe
    public void testAction(TestAction testAction){
     //这里更新视图或者后台操作,从TestAction获取传递参数.
    }

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

在界面 B

public class B extends ActionBarActivity {


    private Button button;



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
        button= (Button) findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                TestAction testAction=new TestAction();
                testAction.setStr("click");
                BusProvider.getInstance().post(testAction);
            }
        });
    }

}

总结:

otto 是一个非常优秀和强大的框架.
在它的使用过程发现:其实你在发布事件的时候并不需要register这个类,而且也可以不使用Produce这个注解,你只要调用这个 BusProvider.getInstance().post(object)方法就可以了,他就会分发事件,这样是不是会更方便呢.
但是你要Subscribe订阅事件就一定要register这个类了,否则是接受不到事件的.
otto 传递事件的时候,参数最后用一个实体类包裹着.因为有些参数不能直接传递.



文/轻微(简书作者)
原文链接:http://www.jianshu.com/p/c8ff4a999a28
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

相关文章推荐

Android 事件总线OTTO用法快速入门

一、Otto介绍 OTTO是Square推出的库,地址:https://github.com/square/otto 先来看看otto的官方介绍 An enhanced Guava-based eve...

Android事件总线分发库的使用Otto(有点像广播,万能数据传递,并且触发)

OTTO是Square推出的基于Guava项目的Android支持库,otto是一个事件总线,用于应用程序的不同组件之间进行有效的通信。OTTO是基于Observer的设计模式。它有发布者,订阅者这两...

Android事件总线(三)otto用法全解析

otto 是 Square公司发布的一个发布-订阅模式框架,它基于Google Guava 项目中的event bus模块开发,针对Android平台做了优化和加强。虽然Square已经停止了对ott...

Otto事件总线框架的使用(一)

Otto是Square提供的一个Android事件总线框架,具体介绍点击这里,项目下载点击这里 一、使用Otto事件总线框架的原因 1.一般情况下,在Android中的Activity与Activit...

otto框架简单的使用(个人笔记)

转:http://android.jobbole.com/82217/ 1、Activity与Activity间的传值是通过Intent,值回调是通过startActivityForResult()...

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

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

Android事件总线框架Otto使用

Otto框架是square公司为Android出的一款事件总线框架,主要是为了解决大项目中耦合性过高的问题,比如涉及到多个类都需要响应某一个操作,原始的做法就是使用广播,事件产生者发送广播,事件订阅者...

android中Otto事件总线框架的使用

Otto是一个在Android中的事件总线框架,它是square的一个开源框架,具体介绍点击这里,项目下载点击这里 为什么要使用Otto事件总线: 通常来说在Android中: 1、Activity...

Otto事件总线框架的使用

Otto是一个在Android中的事件总线框架,它是square的一个开源框架,具体介绍点击这里,项目下载点击这里为什么要使用Otto事件总线: 通常来说在Android中: 1、Activ...

【FastDev4Android框架开发】AndroidAnnnotations注入框架使用之第三方框架集成Otto事件总线(十四)

(一).前言:           前面我们已经对于AndroidAnnotations框架集成RoboGuice做了讲解,今天我们开始具体学习一下第三方框架集成Otto事件总线。Otto事件总线和我...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Otto框架的使用
举报原因:
原因补充:

(最多只允许输入30个字)