Android

Otto的简单使用

2016-08-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最简单的使用就到此了。

上一篇 下一篇

猜你喜欢

热点阅读