android---EventBus的簡單使用(一)


是什么:

  就是用來發消息通信的

怎么用:

  • 定義事件:(消息體)

    

public class MessageEvent { /* Additional fields if needed */ }

 

  • 准備訂閱者:聲明並注釋您的訂閱方法,可選擇指定一個線程模式

    @Subscribe(threadMode = ThreadMode.MAIN)  
    public void onMessageEvent(MessageEvent event) {/* Do something */};
    //粘性事件
    @Subscribe (threadMode = ThreadMode.ASYNC,sticky = true)
    public void myEventBusMessageASYNC(MyMessageEvent myMessageEvent){
        Log.e("EventBus","MyEventBusActivity2 ThreadMode.ASYNC 執行Thread = "+Thread.currentThread().getName()+"------------"+myMessageEvent.name);
        
    }
    

     

      

     

  • 線程模式選擇:
    •   ThreadMode:POSTING  訂閱者將在發布事件的同一線程中調用。這是默認值
    •   ThreadMode:MAIN     訂閱者在主線程中執行 
    •        ThreadMode:MAIN_ORDERED   按照發布順序執行
    •        ThreadMode: BACKGROUND   如果發布在主線程,則新開一個線程,
    •        ThreadMode: ASYNC  新的獨立線程中執行
    •  
  • 注冊和注銷您的訂閱者。例如,在Android上,活動和片段通常應根據其生命周期進行注冊

 

 @Override
 public void onStart() {
     super.onStart();
     EventBus.getDefault().register(this);
 }

 @Override
 public void onStop() {
     super.onStop();
     EventBus.getDefault().unregister(this);
 }
  • 發布活動:
    EventBus.getDefault().post(myMessageEvent);
    EventBus.getDefault().postSticky(myMessageEvent);

      

 

舉例:

  1. 添加依賴:
    implementation 'org.greenrobot:eventbus:3.1.1'
    

     

  2. 創建一個事件,(消息體)
    public class MyMessageEvent {
        public String name = "";
    
        public MyMessageEvent(String name) {
            this.name = name;
        }
    }
    

      

  3. 注冊,注銷訂閱者,按照生命周期來
    @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_my_event_bus);
            EventBus.getDefault().register(this);
        }
    
        @Override
        protected void onDestroy() {
            super.onDestroy();
            EventBus.getDefault().unregister(this);
        }
    

      

  4. 准備訂閱者
    @Subscribe (threadMode = ThreadMode.MAIN)
    public void myEventBusMessage(MyMessageEvent myMessageEvent){
          Log.e("EventBus","name = "+myMessageEvent.name);
           
    }

    //粘性事件
    @Subscribe (threadMode = ThreadMode.ASYNC,sticky = true)
    public void myEventBusMessageASYNC(MyMessageEvent myMessageEvent){
    Log.e("EventBus","MyEventBusActivity2 ThreadMode.ASYNC 執行Thread = "+Thread.currentThread().getName()+"------------"+myMessageEvent.name);

    }

      

  5. 發布活動
    MyMessageEvent myMessageEvent = new MyMessageEvent("1");
     EventBus.getDefault().post(myMessageEvent);
    //粘性事件
    EventBus.getDefault().postSticky(myMessageEvent);

      

參考:

http://greenrobot.org/eventbus/documentation/

 

 

 

 

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM