Otto学习

今天学习了Otto框架,官网地址https://github.com/square/otto 

如何在android studio开发环境下使用Otto呢?

1 添加模块依赖

   步骤:打开官网地址,复制compile 'com.squareup:otto:1.3.8' 这一句 到模块的build.gradle的dependencies节点下。

2 在android studio开发环境中使用Otto,主要使用com.squareup.otto.Bus类和@Produce、 @Subscribe 注解。
   其中Bus类提供了register注册,unregister取消注册和post发布事件
   @Produce注解:生产事件

   @Subscribe注解:订阅事件

3 具体实现步骤如下  

   1)构造一个Bus对象 Bus bus = new Bus();
   在Activity类的onResume方法中注册:bus.register(this);
   在onPause方法中取消注册:bus.unregister(this);

   2)定义一个实体类,如下:

    private class MyEvent {
        private int mValue ;
        public MyEvent(int value) {
            this.mValue = value;
        }
        public int getValue(){
            return mValue;
        }
    }

   3)定义一个事件产生的函数,使用@Produce注解修饰,@Produce告诉Bus该函数是一个事件生产者,产生的事件类型为该函数的返回值:  

    @Produce
      public MyEvent produceMyEvent() {
         return new MyEvent(100);
    }
   4)定义一个订阅事件的函数,使用 @Subscribe注解修饰,告诉Bus该函数订阅了一个事件,该事件的类型为该函数的参数类型:

   @Subscribe
      public void onMyEvent(MyEvent event){
          int value = event.getValue();
          System.out.println("value is" + value);
    }

    5)调用bus.post方法发送一个事件,如下:

   bus.post(produceMyEvent());

     一个Activity既可以是事件的生产者又是事件的订阅者。

     事件生产者和订阅者,都需要Bus注册和解注册,所以整个代码如下:

public class MainActivity extends AppCompatActivity {

    private Bus bus;
    private Button mButton;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mButton = (Button)findViewById(R.id.button);
        mButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //发送一个事件
                bus.post(produceMyEvent());
            }
        });
        bus = new Bus();


    }

    @Override
    protected void onResume() {
        super.onResume();
        bus.register(this);
    }

    @Override
    protected void onPause() {
        super.onPause();
        bus.unregister(this);
    }

    @Produce
    public MyEvent produceMyEvent() {
        return new MyEvent(100);
    }

    @Subscribe
    public void onMyEvent(MyEvent event){
        int value = event.getValue();
        System.out.println("value is" + value);
    }

    private class MyEvent {
        private int mValue ;
        public MyEvent(int value) {
            this.mValue = value;
        }
        public int getValue(){
            return mValue;
        }
    }
}

参考:

http://blog.chengyunfeng.com/?p=450
https://gist.github.com/JakeWharton/3057437



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值