EventBus 是一个开源的 Android 库, 它简化了活动、片段、线程和服务之间的通信, 代码较少, 质量更好。当我们开发一个 android 应用程序时, 我们需要管理 android 组件之间的大量通信, 而这有时变得非常困难。EventBus 库使这项任务变得简单。
为什么 EventBus?
我们使用 EventBus 的主要原因是松散耦合。有时, 您希望处理对应用程序的多个部分感兴趣的特定事件, 如表示层、业务层和数据层, 因此 EventBus 提供了一个简单的解决方案
为此。
EventBus 图书馆的特点
-
简单, 但强大。
-
战斗考验。
-
高性能。
-
方便的基于注释的 API。
-
事件和订阅服务器继承。
您需要有四件事情来实现 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 方法中获取该事件。