Otto是一个用来进行组件之间通信的框架
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中的接口,只是写起来更方便了。