Otto是一個用來進(jìn)行組件之間通信的框架
Otto主要概念就是發(fā)布事件和接收事件,如果要接收事件時,在方法前加一個注解@Subscribe,方法名可以自定義。下面用一個例子來說明,通過MainActivity打開一個OtherActivity,然后OtherActivity發(fā)送數(shù)據(jù)到MainActivity。
Otto通過bus這個類進(jìn)行事件的發(fā)送,要收事件的類必須進(jìn)行注冊,發(fā)送事件的類可以注冊也可以不注冊。
首先把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里點擊按鈕后就發(fā)送事件:
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主要通過訂閱者的接收參數(shù)來選擇發(fā)送事件,如果兩個訂閱者的參數(shù)一樣,那么這兩個訂閱者都會接收到事件,所以,在寫訂閱者方法的參數(shù)的時候,最好再包一層。
Otto就類似Android中的接口,只是寫起來更方便了。