Otto的使用

Otto是一個用來進(jìn)行組件之間通信的框架

GitHub地址
使用方式


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中的接口,只是寫起來更方便了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容