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.