EventBus初体验

xiaoxiao2021-02-28  141

背景:

昨天看了启舰大神的关于EventBus的文章,很久以前的东西我居然没使用,今天学习一下。

何为EventBus(https://github.com/greenrobot/EventBus)

官方如是说:EventBus is a publish/subscribe event bus optimized for Android.EventBus是针对Android优化的发布/订阅事件总线。值得一提的是这家公司也出品了GreenDao这个库。

优点:

简化组件间的关联;使你的代码简化;快速;体积小;具有先进的特性,如交付线程、订阅者优先级等。

使用步骤:

测试场景:从第一个Activity(取名A)跳转到第二个Activity(取名B),然后从B回到A,需要携带一些数据到A(当然不用EventBus也有很多解决方案,这里只学习EventBus的优点和其它方案的缺点,开玩笑)。

代码实现先搭建这个情形,目前和EventBus还没有关系:

A的布局:

<TextView android:id="@+id/text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="跳转"/>

A的代码:

findViewById(R.id.text).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(MainActivity.this, SecondActivity.class); startActivity(intent); } });

B的布局:

<TextView android:id="@+id/text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="第二个界面"/> <Button android:id="@+id/back" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentRight="true" android:text="返回上一页"/>

B的代码:

findViewById(R.id.back).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); } });

至此把场景搭建完了,此时和EventBus还没有半毛钱关系。

EventBus出场:

定义一个类,自己随意,我这里是EventMessage:

public class MessageEvent { public final String message; public MessageEvent(String message) { this.message = message; } }

在接收消息的Activity(A中)注册和解绑和处理收到的信息:

@Override protected void onStart() { super.onStart(); EventBus.getDefault().register(this);//注册 } @Override protected void onStop() { super.onStop(); EventBus.getDefault().unregister(this);//解绑 } @Subscribe(threadMode = ThreadMode.MAIN)//4种模式;3.0之后添加注解并且可以随便给这个方法命名,貌似之前的版本不可以 public void onMessageEvent(MessageEvent messageEvent) { Toast.makeText(this, messageEvent.message, Toast.LENGTH_SHORT).show();//获取消息并显示 }

Activity(B中)发送消息:

findViewById(R.id.back).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { EventBus.getDefault().post(new MessageEvent("就是测试一下EventBus"));//发送的消息 finish(); } });

4种模型:

英文点这里 中文点这

踩过的坑:

接收消息的Activity在消息发送前必须已经注册过,所以你切不可在startActivity(intent)后发送消息,还没来得及注册(如果使用粘性事件另当别论)。不可重复注册。

ps:如有错误,欢迎指正。

转载请注明原文地址: https://www.6miu.com/read-20555.html

最新回复(0)