美文网首页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的简单使用

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