EventBus讲解
来源:互联网 发布:mac sdk 环境变量配置 编辑:程序博客网 时间:2024/05/16 18:14
一、简介
EventBus是一个Android端优化的publish/subscribe消息总线,简化了应用程序内各组件间、组件与后台线程间的通信。比如请求网络,等网络返回时通过Handler或Broadcast通知UI,两个Fragment之间需要通过Listener通信,这些需求都可以通过EventBus实现。
二、下载地址
https://github.com/greenrobot/EventBus
三、使用步骤
1.添加jar包到libs文件夹下
2.注册EventBus.getDefault().register(this);
3.解注册EventBus.getDefault().unregister(this);
4.构造发送消息类
5.发布消息EventBus.getDefault().post(new MessageEvent("dahai","1234"));
6.接收消息
1).ThreadMode.MAIN表示这个方法在主线程中执行
2).ThreadMode.BACKROUND表示给方法在后台执行,不能并发处理
3).ThreadMode.ASYNC表示在后台执行,可以异步并发处理
4).ThreadMode.POSTING表示给方法和消息发送方在同一个线程中执行
四、粘性事件
之前说的使用方法都是需要先注册(register),再post,才能接收到事件
如果使用postSticky发送事件,可以不需要先注册,也能接收到事件
1.构造发送消息类
2.发布消息EventBus.getDefault().postSticky(new StickyEvent("我是粘性事件"));
3.接收消息
4.注册EventBus.getDefault().register(this);
5.解注册EventBus.getDefault().unregister(this);
五、代码
点击图1中的第一个按钮,跳转到图二,点击图2第一个按钮,发送消息到图1,并在文本中显示
点击图1中的第二个按钮,发送粘性数据并跳转到图二,点击图2第二个按钮,注册粘性事件,并在图2文本中显示
其中1.1~1.5是主线程发送消息,2.1~2.5是发送粘性事件
创建发送消息类
public class MessageEvent { public String name; public MessageEvent(String name) { this.name = name; }}创建粘性事件消息类
public class StickyEvent { public String msg; public StickyEvent(String msg) { this.msg = msg; }}
EventBusActivity主线程点击按钮发送消息
public class EventBusActivity extends Activity { private TextView tv_title; private Button bt_eventbus_send; private Button bt_eventbus_sticky; private EditText et_eventbus_result; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_event_bus); initView(); initData(); initListener(); } private void initListener() { //跳转到发送页面 bt_eventbus_send.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(EventBusActivity.this, EventBusSendActivity.class); startActivity(intent); } }); //发送粘性事件到发送页面 bt_eventbus_sticky.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //2.2发送粘性事件 EventBus.getDefault().postSticky(new StickyEvent("我是粘性事件")); Intent intent = new Intent(EventBusActivity.this, EventBusSendActivity.class); startActivity(intent); } }); } private void initData() { tv_title.setText("EventBus"); //1.1注册广播 EventBus.getDefault().register(EventBusActivity.this); } //1.5接收消息 @Subscribe(threadMode = ThreadMode.MAIN) public void MessageEventBus(MessageEvent event) { //显示接收到的消息 et_eventbus_result.setText(event.name); } private void initView() { tv_title = (TextView) findViewById(R.id.tv_title); bt_eventbus_send = (Button) findViewById(R.id.bt_evetnbus_send); bt_eventbus_sticky = (Button) findViewById(R.id.bt_evetnbus_sticky); et_eventbus_result = (EditText) findViewById(R.id.et_eventbus_result); } @Override protected void onDestroy() { super.onDestroy(); //1.2解注册 EventBus.getDefault().unregister(EventBusActivity.this); }}
EventBusSendActivity类
public class EventBusActivity extends Activity { private TextView tv_title; private Button bt_eventbus_send; private Button bt_eventbus_sticky; private EditText et_eventbus_result; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_event_bus); initView(); initData(); initListener(); } private void initListener() { //跳转到发送页面 bt_eventbus_send.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(EventBusActivity.this, EventBusSendActivity.class); startActivity(intent); } }); //发送粘性事件到发送页面 bt_eventbus_sticky.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //2.2发送粘性事件 EventBus.getDefault().postSticky(new StickyEvent("我是粘性事件")); Intent intent = new Intent(EventBusActivity.this, EventBusSendActivity.class); startActivity(intent); } }); } private void initData() { tv_title.setText("EventBus发送数据页面"); //1.1注册广播 EventBus.getDefault().register(EventBusActivity.this); } //1.5接收消息 @Subscribe(threadMode = ThreadMode.MAIN) public void MessageEventBus(MessageEvent event) { //显示接收到的消息 et_eventbus_result.setText(event.name); } private void initView() { tv_title = (TextView) findViewById(R.id.tv_title); bt_eventbus_send = (Button) findViewById(R.id.bt_evetnbus_send); bt_eventbus_sticky = (Button) findViewById(R.id.bt_evetnbus_sticky); et_eventbus_result = (EditText) findViewById(R.id.et_eventbus_result); } @Override protected void onDestroy() { super.onDestroy(); //1.2解注册 EventBus.getDefault().unregister(EventBusActivity.this); }}
阅读全文
0 0
- EventBus 讲解
- EventBus讲解
- android EventBus深度讲解
- EventBus---基础讲解
- 详细讲解Android框架EventBus
- 实例讲解EventBus for Android
- EventBus详解-全面讲解用法
- EventBus全面讲解和案例
- Android开发之EventBus讲解
- EventBus使用详细讲解,结合示例
- EventBus的详细讲解及使用
- EventBus 《三》 事件的具体用法及其讲解
- 项目解耦必备-EventBus的详细讲解(一)
- 项目解耦必备-EventBus的详细讲解(二)
- EventBus
- EventBus
- EventBus
- EventBus
- 为什么需要指针,不要可以吗
- 老毛桃地址
- Ajax实现原理详解
- ((NULL) null).printNULL();((NULL) null).printnull();
- MySQL数据库SYS CPU高的可能性分析
- EventBus讲解
- 多态
- Hibernate的关联关系注解映射(一对一、一对多、多对一、多对多、自连接) 标签: hibernateentity 2016-10-11 16:28 1635人阅读 评论(0) 收藏 举报 分类
- 多路查找树——2-3树——B树
- RocketMQ——Consumer篇:启动过程
- springcloud(六):配置中心git示例
- Cloudsim 3.0.3中任务到VM的映射
- hdu3041 单调队列优化dp
- [Linux] df -h 回显不全