Otto的使用

2016-09-09  本文已影响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中的接口,只是写起来更方便了。

上一篇下一篇

猜你喜欢

热点阅读