美文网首页Android
Otto的简单使用

Otto的简单使用

作者: 林噢噢 | 来源:发表于2016-08-26 00:26 被阅读1482次

第一次写简书,只为了把平时用到的知识记录保存下来,同时也希望能对又需要的学者有帮助。

今天刚好用了大名鼎鼎的Otto,Otto是一个事件总线,可以替代Intent、Handler和BroadcastReceiver 在四大组件之间传递消息,而且开销极小,同时能让我们的代码更加优雅,还有一个大大的好处就是可以将消息发送者和接收者解耦。好了,说了这么多,那就让我们来看看Otto到底是个什么东东吧。

首先献上官网:http://square.github.io/otto/

首先让我们了解下Otto的使用场景,由Activity、FragmentA、FragmentB组成,其中Activity管理者Fragment,可以点击FragmentA的Button从而更新FragmentB的UI。

这种场景我们当然可以用startActivityResult 和接口的方式来实现,但是会产生很多种状态和逻辑判断,并且可能会不必要的bug和繁琐的代码,更重要的是处理不好的话会内存泄漏,所以使用Otto就能很容易解决这些问题。

基本用法:

在Android Studio中配置

dependencies {

compile 'com.squareup:otto:1.3.8'

}

订阅和取消订阅

bus.register(this);

bus.unregister(this);

发布:

bus.post(new MessageEvent());

注解

@Subscribe:这个在调用了register后有效,表示订阅了一个事件,并且方法的用 public 修饰的.方法名可以随意取,重点是参数,它是根据你的参数进行判断

@Produce注解告诉Bus该函数是一个事件产生者,产生的事件类型为该函数的返回值。

最后我们还要在我们的proguard-project.txt文件添加以下代码,防止混淆。

-keepattributes *Annotation*

-keepclassmembers class ** {

@com.squareup.otto.Subscribe public *;

@com.squareup.otto.Produce public *;

}

接下来就是一个简单的例子:

首先是一个单例

public class SingleOtto {

private static final SingleOtto otto = null

public static SingleOtto getInstance() {

if(otto = null){

otto = new SingleOtto();

}

return otto;

}

private SingleOtto() {}

}

定义一个消息实体

public class MessageEvent {

public String msg;

public MessageEvent(String msg) {

this.msg = msg;

}

}

Activity , 事件订阅

public class MainActivity extends Activity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View view) {

SingleOtto.getInstance().post(new MessageEvent("hehehe"));//发布事件

}

});

}

@Override

protected void onResume() {

super.onResume();

SingleOtto.getInstance().register(this);//注册

}

@Override

protected void onPause() {

super.onPause();

SingleOtto.getInstance().unregister(this);//注销

}

@Subscribe  //订阅事件MessageEvent

public void receiveEvent1(MessageEvent event){

Log.i("otto", "hello");

}

@Subscribe  //订阅事件

public void receiveEvent2(MessageEvent event){

Log.i("otto", "world");

}

@Produce    //产生事件

public MessageEvent sendEvent(){

return new MessageEvent("this is my world ~~~");

}

}

Otto最简单的使用就到此了。

相关文章

  • Otto的简单使用

    第一次写简书,只为了把平时用到的知识记录保存下来,同时也希望能对又需要的学者有帮助。 今天刚好用了大名鼎鼎的Ott...

  • Otto的使用

    Otto是一个用来进行组件之间通信的框架 GitHub地址使用方式 Otto主要概念就是发布事件和接收事件,如果要...

  • Otto快速使用

    引入 otto 1、创建AppBus单例,提高效率 2、创建数据类(因为otto没有EventBus的tag标记功...

  • EventBus源码解析开篇

    开篇说明 上篇博文《Otto源码解读》简单分析了Otto的实现原理,总的来说就是检索收集各个注册对象中的@Subs...

  • Otto源码分析

    Otto是Square公司推出的事件总线库,目的是当你应用里的不同部分需要进行通讯时进行解耦。 使用方法 Otto...

  • [Android组件解读] 被square公司抛弃的Otto框架

    最近讲的都是square出品的组件,今天还是继续讲解Square旗下的Otto框架 引用otto官网说的 Otto...

  • otto

    otto是在安卓中组件之间用来通信的库,优点是可以降低多个组件之间的通信的耦合度,也就是解耦.比如说:界面A要跳转...

  • Otto框架

    一、Otto介绍 OTTO是Square推出的库,地址:https://github.com/square/ott...

  • 用RxJava实现事件总线(Event Bus)

    目前大多数开发者使用EventBus或者Otto作为事件总线通信库,对于RxJava使用者来说,RxJava也可以...

  • 源码分析--AndroidEventBus(1--registe

    Android事件库中使用者最多的应该是EventBus 和 Otto了,而选择AndroidEventBus的原...

网友评论

    本文标题:Otto的简单使用

    本文链接:https://www.haomeiwen.com/subject/juvwsttx.html