EventBus 是一個開源的 Android 庫, 它簡化了活動、片段、線程和服務之間的通信, 代碼較少, 質量更好。當我們開發一個 android 應用程序時, 我們需要管理 android 組件之間的大量通信, 而這有時變得非常困難。EventBus 庫使這項任務變得簡單。

為什么 EventBus?

我們使用 EventBus 的主要原因是松散耦合。有時, 您希望處理對應用程序的多個部分感興趣的特定事件, 如表示層、業務層和數據層, 因此 EventBus 提供了一個簡單的解決方案
為此。

EventBus 圖書館的特點

  1. 簡單, 但強大。

  2. 戰斗考驗。

  3. 高性能。

  4. 方便的基于注釋的 API。

  5. 事件和訂閱服務器繼承。

您需要有四件事情來實現 EventBus:

1. EventBus 對象。

EventBus myEventBus = EventBus.getDefault();

2.事件正常 POJO 類。

public class DataSyncEvent {
    private final String syncStatusMessage;

    public DataSyncEvent(String syncStatusMessage) {
        this.syncStatusMessage = syncStatusMessage;
    }

    public String getSyncStatusMessage() {
        return syncStatusMessage;
    }
}

3.將發送事件的發件人。

EventBus.getDefault().post(new DataSyncEvent("Sync SuccessFully”);

4.訂戶, 將聽取我們的活動的人。

@Subscribe
public void onEvent(DataSyncEvent syncStatusMessage)
{
    Toast.makeText(this, syncStatusMessage.getSyncStatusMessage(), Toast.LENGTH_SHORT).show();
}

最后兩個步驟是注冊和注銷要偵聽事件的 EventBus。最好的方法是在 onStart 方法中注冊它, 并在活動的 onStop 方法中注銷它。

@Override
protected void onStart() {
    super.onStart();
    EventBus.getDefault().register(this);
}
@Override
protected void onStop() {
    super.onStop();
    EventBus.getDefault().unregister(this);
}

讓我們舉一個簡單的例子。在我們的項目中, 如果我們希望在應用程序啟動時將數據同步到服務器, 為此, 只需從應用程序的啟動程序活動啟動一個意向服務, 并通過意向服務將數據同步到服務器。然后, 通知屏幕 (通過 theEventBus 庫), 這是當前對用戶可見的同步。

實施 EventBus

在 gradle 文件中添加依賴項。

compile 'de.greenrobot:eventbus:2.4.0'

添加 “意向服務” 類, 它將在應用程序啟動時啟動。

    public class SyncDataService extends IntentService
    {
        public SyncDataService()
        {
            super("SyncDataService");
        }

        @Override
        protected void onHandleIntent(Intent intent)
        {
            //first check if internet is availabe or not.
            if(DeviceManager.isInternetAvailableOnDevice())
            {
//            try
//            {
//              //write the code to sync the data to Server
                //post the event after sync complete 
                EventBus.getDefault().post(new DataSyncEvent("Data Sync SuccessFully"));
//            }
//            catch (RTITBException exception)
//            {
//                LogManager

addLog (異常 getExceptionCode (), 異常 getMessage (), 例外);
// }
}
}
}

主要活動:

public class MainActivity extends AppCompatActivity
{
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    //Register the EventBus
    @Override
    protected void onStart()
    {
        super.onStart();
        EventBus.getDefault().register(this);
    }
    //UnRegister the EventBus
    @Override
    protected void onStop()
    {
        super.onStop();
        EventBus.getDefault().unregister(this);
    }
    //The Method which will call every time when data sync to server
    @Subscribe
    public void onEvent(DataSyncEvent syncStatusMessage)
    {
        //you can do whatever you want releted with UI
        Toast.makeText(this, syncStatusMessage.getMessage(), Toast.LENGTH_SHORT).show(); 
    }
}

如果應用程序的任何其他組件要偵聽該事件, 則只需注冊上述方法中提到的 EventBus onStart 并重寫方法 onEvent。

EventBus 圖書館就像一臺無線電 frequencyl;如果你想聽任何歌曲, 你只需要設置的頻率, 該站。同樣, EventBus 圖書館也張貼事件;如果任何組件要偵聽該事件, 那么我們需要為 EventBus 對象注冊該組件, 我們將在 onEvent 方法中獲取該事件。

Comments are closed.