EventBus

經常使用事件消息傳遞多線程

① 一個實現了監聽器接口的類,必須把它自身註冊到它想要監聽的類中去post

② 使用廣播,內部的實現都須要IPC,從傳遞效率上來講,可能並不太適合上層的組件間的通訊優化

③ Activity間的消息傳遞時經過startActivityForResult 和onActivityResult,會產生較多的狀態或邏輯判斷,並且Intent或Bundle傳值還得檢測類型,容易發生錯誤this

 

什麼是EventBus?spa

      EventBus是一款針對Android優化的發佈/訂閱事件總線,主要功能是替代Intent,Handler,Broadcast在Fragment,Activity,Service,線程之間傳遞消息,優勢是開銷小,代碼更優雅,以及將發送者和接收者解耦,他能夠讓倆個組件相互通訊,可是它們之間並不相互知曉線程

 

事件總線發佈EventBus與otto的區別?接口

什麼是事件總線管理:隊列

將事件放在隊列裏面,用於管理和分發事件

保證應用的各個部分之間高效的通訊及數據,事件分發get

模塊間解耦

 

 

Eventbus包含四個部分:

    發佈者(publisher),訂閱者(subscriber),事件,總線

    使用時須要先訂閱註冊,而後向訂閱者發佈消息便可

    訂閱者能夠訂閱多個事件,發佈者能夠發佈任何事件,發佈者同時也能夠是訂閱者

    步驟:訂閱,註冊,發佈,取消註冊

 

基本用法:

註冊: 

            ① EventBus.getDefault().register(this);

            ②  EventBus.getDefault().register(new Event());

            ③  EventBus.getDefault().register(this,methodName,Event.class);

            三個參數:消息訂閱者(接收者),接收方法名,事件類

取消註冊:

                ① EventBus.getDefault().unregister(this);

                ② EventBus.getDefault().unregister(new Event());

訂閱處理數據:

        ① onEventMainThread   運行在主線程中,能夠在這直接操做UI

        ② onEvent   與發佈者在同一個線程

        ③ onEventPostThead   發佈者發送數據的線程與接收者接收的線程是一個

        ④ onEventAsync  執行在一個新的線程,適用多個多線程處理,內部有線程池管理,在獨立線程中運行

        ⑤ onEventBackgroundThread   執行在子線程,若是發佈者在子線程則直接執行,若是不是在子線程那麼建立一個新的線程,在後臺線程中運行

發佈:EventBus.getDefault().post(new Event(meg));

相關文章
相關標籤/搜索