EventBus详解及简单实例

举报
第三女神程忆难 发表于 2021/05/26 14:46:05 2021/05/26
【摘要】 EventBus引入 EventBus:Github Event bus for Android and Java that simplifies communication between Activities, Fragments, Threads, Services, etc. Less code, better quality.  翻译:适用于And...

EventBus引入

EventBus:Github


Event bus for Android and Java that simplifies communication between Activities, Fragments, Threads, Services, etc. Less code, better quality. 

翻译:适用于Android和Java的事件总线,简化了活动,碎片,线程,服务等之间的通信。减少代码,提高质量。


EventBus是Android和Java的发布/订阅事件总线。

使用优点:

1、简化了组件之间的通信

      将事件发送者和接收者分离

      在活动,片段和后台线程中良好

      避免复杂且容易出错的依赖关系和生命周期问题

2、使代码更简单

3、很快、很小,具有交付线程,用户优先级等高级功能。


Event使用有三步

(1) 定义事件

(2) 准备订阅者:声明并注释您的订阅方法,可选择指定线程模式。注册和注销您的订阅者。例如,在Android上,活动和片段通常应根据其生命周期进行注册

(3) 发送event。


EventBus案例

实现效果:引入EnentBus,使用EnentBus一个消息的发送和接收,在MainActivity上写一个按钮和一个TextView,点击MainActivity上的按钮,跳转到另一个Activity,在另一个Activity上也有一个按钮,点击这一个按钮将消息写在MainActivity的TextView上。

 

先导入依赖: implementation 'de.greenrobot:eventbus:3.0.0-beta1'

 

定义一个EventBus的消息类,写出 构造方法和get方法


  
  1. public class EventMessage {
  2. private String message;
  3. public EventMessage(String message) {
  4. this.message = message;
  5. }
  6. public String getMessage() {
  7. return message;
  8. }
  9. public void setMessage(String message) {
  10. this.message = message;
  11. }
  12. }

 

MainActivity:


  
  1. public class MainActivity extends AppCompatActivity {
  2. @BindView(R.id.activitybutton)
  3. Button activitybutton;
  4. @BindView(R.id.textView)
  5. TextView textView;
  6. @Override
  7. protected void onCreate(Bundle savedInstanceState) {
  8. super.onCreate(savedInstanceState);
  9. setContentView(R.layout.activity_main);
  10. ButterKnife.bind(this);
  11. EventBus.getDefault().register(this);
  12. }
  13. @Override
  14. protected void onDestroy() {
  15. super.onDestroy();
  16. EventBus.getDefault().unregister(this);
  17. }
  18. //接收消息
  19. @Subscribe(threadMode = ThreadMode.MainThread)
  20. public void onEvent(EventMessage eventMessage){
  21. String message = eventMessage.getMessage();
  22. textView.setText(message);
  23. }
  24. //按钮监听
  25. @OnClick(R.id.activitybutton)
  26. public void onViewClicked() {
  27. Intent intent = new Intent(MainActivity.this,SecondActivity.class);
  28. startActivity(intent);
  29. }
  30. }

 

SecondActivity:


  
  1. public class SecondActivity extends AppCompatActivity {
  2. @BindView(R.id.secondActivity)
  3. Button secondActivity;
  4. @Override
  5. protected void onCreate(Bundle savedInstanceState) {
  6. super.onCreate(savedInstanceState);
  7. setContentView(R.layout.activity_second);
  8. ButterKnife.bind(this);
  9. }
  10. @OnClick(R.id.secondActivity)
  11. public void onViewClicked() {
  12. new Thread(
  13. new Runnable() {
  14. @Override
  15. public void run() {
  16. //EventBus发送消息
  17. EventBus.getDefault().post(new EventMessage("I want to send a message to MainActivity!我要向MainActivity发送消息"));
  18. }
  19. }
  20. ).start();
  21. }
  22. }

 

效果展示:

文章来源: myhub.blog.csdn.net,作者:第三女神程忆难,版权归原作者所有,如需转载,请联系作者。

原文链接:myhub.blog.csdn.net/article/details/84203028

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。