EventBus詳解及簡單例項

funnyok發表於2021-09-09

EventBus引入

EventBus:


Event bus for Android and Java that simplifies communication between Activities, Fragments, Threads, Services, etc. Less code, better quality. 

翻譯:適用於Android和Java的事件匯流排,簡化了活動,碎片,執行緒,服務等之間的通訊。減少程式碼,提高質量。


EventBus是Android和Java的釋出/訂閱事件匯流排。

圖片描述

使用優點:

1、簡化了元件之間的通訊

      將事件傳送者和接收者分離

      在活動,片段和後臺執行緒中良好

      避免複雜且容易出錯的依賴關係和生命週期問題

2、使程式碼更簡單

3、很快、很小,具有交付執行緒,使用者優先順序等高階功能。


Event使用有三步

(1) 定義事件

(2) 準備訂閱者:宣告並註釋您的訂閱方法,可選擇指定執行緒模式。註冊和登出您的訂閱者。例如,在Android上,活動和片段通常應根據其生命週期進行註冊

(3) 傳送event。


EventBus案例

實現效果:引入EnentBus,使用EnentBus一個訊息的傳送和接收,在MainActivity上寫一個按鈕和一個TextView,點選MainActivity上的按鈕,跳轉到另一個Activity,在另一個Activity上也有一個按鈕,點選這一個按鈕將訊息寫在MainActivity的TextView上。


先匯入依賴: implementation 'de.greenrobot:eventbus:3.0.0-beta1'


定義一個EventBus的訊息類,寫出 構造方法和get方法

public class EventMessage {    private String message;    public EventMessage(String message) {        this.message = message;
    }    public String getMessage() {        return message;
    }    public void setMessage(String message) {        this.message = message;
    }
}



MainActivity:

public class MainActivity extends AppCompatActivity {    @BindView(R.id.activitybutton)
    Button activitybutton;    @BindView(R.id.textView)
    TextView textView;    @Override
    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);
        EventBus.getDefault().register(this);
    }    @Override
    protected void onDestroy() {        super.onDestroy();
        EventBus.getDefault().unregister(this);
    }    
    //接收訊息
    @Subscribe(threadMode = ThreadMode.MainThread)    public void onEvent(EventMessage eventMessage){
        String message = eventMessage.getMessage();
        textView.setText(message);
    }    //按鈕監聽
    @OnClick(R.id.activitybutton)    public void onViewClicked() {
        Intent intent = new Intent(MainActivity.this,SecondActivity.class);
        startActivity(intent);
    }
}



SecondActivity:

public class SecondActivity extends AppCompatActivity {    @BindView(R.id.secondActivity)
    Button secondActivity;    @Override
    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
        ButterKnife.bind(this);
    }    @OnClick(R.id.secondActivity)    public void onViewClicked() {        new Thread(                new Runnable() {                    @Override
                    public void run() {                        //EventBus傳送訊息
                        EventBus.getDefault().post(new EventMessage("I want to send a message to MainActivity!我要向MainActivity傳送訊息"));
                    }
                }
        ).start();
    }
}



效果展示:

圖片描述


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/3137/viewspace-2823166/,如需轉載,請註明出處,否則將追究法律責任。

相關文章