EventBus粘性事件
上一篇博客给大家详细的介绍了EeventBus,相信大家有一定的了解了吧,这回给大家解说EventBus粘性事件,它们两个的区别在于实现的方式不同下面给大家介绍EventBus粘性事件和实现方法
概述
EventBus是针一款对Android的发布/订阅事件总线。它可以让我们很轻松的实现在Android各个组件之间传递消息,并且代码的可读性更好,耦合度更低。
导入依赖包:
选择Open Module Settings
点击app,在点击Dependencies,最后点Library dependency
在搜索框中输入eventbus,点击搜索在列表中选择org.greenrobt:eventbus:3.0.0,在点击ok
activity_main.xml布局:
<?xml version="1.0" encoding="utf-8"?>
MainActivity代码:
在onCreate();方法里只需调用初始化控件的方法
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); }
接下来在initIView();进行控件的初始化操作
private void initView() { mButton = (Button) findViewById(R.id.btn_Send); mButton.setOnClickListener(this); }
最后是按钮的点击事件操作,这这里我们只需做个跳转页面的操作
@Override public void onClick(View view) { switch (view.getId()) { case R.id.btn_Send: //跳转到接收消息的界面 EventBus.getDefault().postSticky(new EventBusStickyMessage("我是由主页面发送过来的的黏性事件")); Intent intent = new Intent(MainActivity.this, EventBusSendActivity.class); Toast.makeText(MainActivity.this, "我是从主页面跳转过来的,我将主页面的消息内容呈现到子页面来展示", Toast.LENGTH_LONG).show(); startActivity(intent); break; } }}
在这里如果你还没有创建另一个Activity,那就先开始创建吧,创建完成后我们就开始写布局吧,我们只需用一个Button按钮,和一个TextView文本.
Java布局:
<?xml version="1.0" encoding="utf-8"?>
接着我们创建一个 EventBusStickyMessage一个类,和上一篇的一样,你需要发送什么类型的消息,就定义哪种类型的,我还是定义的 String类型
public class EventBusStickyMessage { public String message; public EventBusStickyMessage(String message) { this.message = message; }}
接下来我们就开始在接受消息的 Activity里写代码了.
boolean flag=true;作用是做个标记,防止EventBus会进行多次注册
initView();调用初始化控件方法
public class EventBusSendActivity extends AppCompatActivity implements View.OnClickListener { private TextView mTextView; private Button mBtn_receive; boolean flag = true; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_event_bus_send); initView(); }
通过下面的点击事件,我们做一些这样的操作,点击按钮接受粘性数据,实际就是补上注册的环节,是不是听着有点晕啊用心看,注意你一旦注册EventBus就会接收到消息.
注册:EventBus然后通过判断标记EventBus
@Override public void onClick(View view) { switch (view.getId()) { case R.id.btn_Receive: if (flag) { EventBus.getDefault().register(this); //更改标记,使其不会再进行注册,多次注册会报错 Toast.makeText(EventBusSendActivity.this, "我收到主页面的消息啦", Toast.LENGTH_SHORT).show(); flag = false; } break; } }
接受粘性事件,多了一个属性Sticky,改为true启动粘性事件
@Subscribe(threadMode = ThreadMode.MAIN, sticky = true) public void EventBusSticky(EventBusStickyMessage eventBusStickyMessage){ mTextView.setText(eventBusStickyMessage.message); }
注意:有注册就必须解除注册(一般在OnDestroy里执行解注册操作),防止内存泄漏,注册一个界面只能注册一次,否则报错
@Override protected void onDestroy() { //移除所有的黏性事件 EventBus.getDefault().removeAllStickyEvents(); //解除注册 EventBus.getDefault().unregister(this); super.onDestroy(); }
实现效果
当你点击A页面,将A页面的消息,发送给B页面,通过点击接收消息按钮,将消息用文本展示出来
A页面 B页面 B页面
更多相关文章
- 用Kotlin实现Android点击事件的方法
- Android(安卓)通用的下拉刷新,重温事件传递
- Android(安卓)Looper详解
- 图解 Android(安卓)事件分发机制
- Android辅助功能服务AccessibilityService
- 【Android学习笔记】Android中View的事件分发机制
- Xamrin开发安卓笔记(一)
- 【移动开发】Android中WIFI开发总结(二)
- 国外的通过Binder类创建Bound Service例子Create a Bound Servic