<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          EventBus AndroidAndroid 開(kāi)源框架

          聯(lián)合創(chuàng)作 · 2023-09-25 03:46

          EventBus是一個(gè)觀察者模式的實(shí)現(xiàn)。

          背景介紹

          如果你學(xué)習(xí)過(guò)設(shè)計(jì)模式,那么當(dāng)想通知其他組件某些事情發(fā)生時(shí)你一定會(huì)使用觀察者模式。好了,既然能想到這個(gè)設(shè)計(jì)模式,那么就來(lái)看一個(gè)屌爆天的Android開(kāi)源框架EventBus。主要功能是替代Intent、Handler、BroadCast在Fragment、Activity、Service、線程之間傳遞消息。他的最牛逼優(yōu)點(diǎn)是開(kāi)銷(xiāo)小,代碼簡(jiǎn)潔,解耦代碼。

          基礎(chǔ)介紹

              上面說(shuō)了,EventBus是一個(gè)觀察者模式的實(shí)現(xiàn),既然這樣,那他就有如下三個(gè)要素:

          • Event:事件

          • Subscriber:事件訂閱者,接收特定的事件。

          • Publisher:事件發(fā)布者,用于通知Subscriber有事件發(fā)生。

          其中,Event可以使任意類(lèi)型對(duì)象。Subscriber都是以約定的onEvent開(kāi)頭的函數(shù),具體是onEvent,onEventMainThread,onEventBackgroundThread,onEventAsync這四個(gè)。Publisher可以通過(guò)post(Object)在任意線程任意位置發(fā)送事件。

          官方這個(gè)圖就很直觀的說(shuō)明了這種觀察者模式的架構(gòu):

          依據(jù)開(kāi)源庫(kù)組件的說(shuō)明文檔來(lái)操作:

          1. 在工程gradle中添加:compile ‘de.greenrobot:eventbus:2.4.0’。

          2. 按照文檔HOWTO.md進(jìn)行操作。

          Subscriber以onEvent開(kāi)頭的4個(gè)函數(shù)區(qū)別:

          • onEvent:事件的處理在和事件的發(fā)送在相同的線程,所以事件處理時(shí)間不應(yīng)太長(zhǎng),不然影響事件的發(fā)送線程。

          • onEventMainThread: 事件的處理會(huì)在UI線程中執(zhí)行。事件處理時(shí)間不能太長(zhǎng),長(zhǎng)了會(huì)出現(xiàn)臭名遠(yuǎn)之的ANR。

          • onEventBackgroundThread:事件的處理會(huì)在一個(gè)后臺(tái)線程中執(zhí)行。雖然名字是BackgroundThread,事件處理是在后臺(tái)線程,但事件處理時(shí)間還是不應(yīng)該太長(zhǎng),因?yàn)槿绻l(fā)送事件的線程是后臺(tái)線程,會(huì)直接在當(dāng)前后臺(tái)線程執(zhí)行事件;如果當(dāng)前線程是UI線程,事件會(huì)被加到一個(gè)隊(duì)列中,由一個(gè)線程依次處理這些事件,如果某個(gè)事件處理時(shí)間太長(zhǎng),會(huì)阻塞后面的事件的派發(fā)或處理。

          • onEventAsync:事件處理會(huì)在單獨(dú)的線程中執(zhí)行,主要用于在后臺(tái)線程中執(zhí)行耗時(shí)操作,每個(gè)事件會(huì)開(kāi)啟一個(gè)線程,但最好限制線程的數(shù)目。

          瀏覽 34
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  中国 免费XXXX18 | 午夜神马久久 | 手机在线免费AV | 中文字幕中文字幕一区 | 国产美女操逼黄站 |