美文网首页
Otto的使用

Otto的使用

作者: 码圣 | 来源:发表于2016-09-09 16:03 被阅读68次

    Otto是一个用来进行组件之间通信的框架

    GitHub地址
    使用方式


    Otto主要概念就是发布事件和接收事件,如果要接收事件时,在方法前加一个注解@Subscribe,方法名可以自定义。下面用一个例子来说明,通过MainActivity打开一个OtherActivity,然后OtherActivity发送数据到MainActivity。


    Otto通过bus这个类进行事件的发送,要收事件的类必须进行注册,发送事件的类可以注册也可以不注册。
    首先把Bus做成一个单例:

    public class BusManager {
        private static Bus mBus;
        public static Bus getInstance(){
            if (mBus == null) {
                mBus=new Bus();
            }
            return mBus;
        }
    
    }
    

    这是MainActivity的代码,主要是注册和接收事件:

    public class MainActivity extends AppCompatActivity {
    
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            BusManager.getInstance().register(this);
        }
    
    
        @Subscribe
        public void receive(String s) {
            Log.d("alan", "收到事件");
            Log.d("alan", "s--->" + s);
    
        }
    
        public void click(View v) {
            startActivity(new Intent(this, OtherActivity.class));
        }
    
        @Override
        protected void onDestroy() {
            BusManager.getInstance().unregister(this);
            super.onDestroy();
        }
    }
    
    

    在OtherActivity里点击按钮后就发送事件:

    public class OtherActivity extends AppCompatActivity {
    
        private Bus bus;
    
        @Override
        protected void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.other_layout);
            bus = BusManager.getInstance();
    
        }
        //点击按钮
        public void btn(View v){
    
            bus.post("a string");
        }
    }
    
    

    otto主要通过订阅者的接收参数来选择发送事件,如果两个订阅者的参数一样,那么这两个订阅者都会接收到事件,所以,在写订阅者方法的参数的时候,最好再包一层。


    Otto就类似Android中的接口,只是写起来更方便了。

    相关文章

      网友评论

          本文标题:Otto的使用

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