ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
* EventBus是一款针对Android优化的发布/订阅事件总线。以观察者模式实现,用于简化程序的组件、线程通信,可以轻易切换线程、开辟线程。在APP的项目中,大量使用了EventBus进行Android组件间的数据传递。 以识别动画刷新事件为例: 1. 发送事件 ~~~ //开始识别时,发送RecordUpdateEvent.RECORDING EventBus.getDefault().post(new RecordUpdateEvent(RecordUpdateEvent.RECORDING)); //刚结束说话,讯飞仍未返回识别结果时,发送RecordUpdateEvent.RECOGNIZING EventBus.getDefault().post(new RecordUpdateEvent(RecordUpdateEvent.RECOGNIZING)); //识别结束,发送RECORD_IDLE_AFTER_RECOGNIZED EventBus.getDefault().post(new RecordUpdateEvent(RecordUpdateEvent.RECORD_IDLE_AFTER_RECOGNIZED)); ~~~ 2. 接收事件(此处是在VoiceInputFragment接收,还有其他地方接收该事件) ~~~ //处理识别动画刷新事件 public void onRecordUpdate(RecordUpdateEvent e){ switch (e.getState()) { case RecordUpdateEvent.RECORD_IDLE: case RecordUpdateEvent.RECORD_IDLE_AFTER_RECOGNIZED: voiceBt.setRecordIdleState(); mFbviTextInputBt.setVisibility(View.VISIBLE); mFvbiManualBt.setVisibility(View.VISIBLE); break; case RecordUpdateEvent.RECORDING: ((MainActivity) getActivity()).closeSlidingMenu(); ((MainActivity) getActivity()).scroll2LastPosition(); //判断是否展示话筒的波纹效果 boolean isShow = AppConfig.dPreferences.getBoolean("wave_show", true); if (isShow) { mFbviTextInputBt.setVisibility(View.GONE); mFvbiManualBt.setVisibility(View.GONE); voiceBt.setRecordStartState(); } break; case RecordUpdateEvent.RECOGNIZING: voiceBt.setRecognizeCompletedState(); break; } } ~~~ * 由于EventBus强解耦的特性,对数据的发送和接收都较难维护管理。因此在项目中,需要使用EventBus传递的数据都定义一个事件对象来封装,并且将所有事件都放在同一包下。项目中已定义的事件如下图所示: ![](https://box.kancloud.cn/ae7e697a9430e6efa665b41a3f1256fb_335x782.png)