EventBus
2018-06-22 05:00:01来源:未知 阅读 ()
1、简介
EventBus是一个Android端优化的publish/subscribe消息总线,简化了应用程序内各组件间、组件与后台线程间的通信。比如请求网络,等网络返回时通过Handler或Broadcast通知UI,两个Fragment之间需要通过Listener通信,这些需求都可以通过EventBus实现。
eventbus原理框图.png
2、下载地址
https://github.com/greenrobot/EventBus
3、使用步骤
1)添加jar包到libs文件夹下
2)注册
EventBus.getDefault().register(this);
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); EventBus.getDefault().register(this); }
3)解注册
EventBus.getDefault().unregister(this);
@Override protected void onDestroy() { super.onDestroy(); EventBus.getDefault().unregister(this); }
4)构造发送消息类
public class MessageEvent { public String name; public String password; public MessageEvent(String name, String password) { this.name = name; this.password = password; } }
5)发布消息
EventBus.getDefault().post(new MessageEvent("dahaige","123456"));
6)接收消息
ThreadMode.MAIN 表示这个方法在主线程中执行
ThreadMode.BACKGROUND 表示该方法在后台执行,不能并发处理
ThreadMode.ASYNC 也表示在后台执行,可以异步并发处理。
ThreadMode.POSTING 表示该方法和消息发送方在同一个线程中执行
@Subscribe(threadMode = ThreadMode.MAIN) public void messageEventBus(MessageEvent event){ tv_result.setText("name:"+event.name+" passwrod:"+event.password); }
4、粘性事件
之前说的使用方法, 都是需要先注册(register), 再post,才能接受到事件;
如果你使用postSticky发送事件, 那么可以不需要先注册, 也能接受到事件.
1)构造发送信息类
public class StickyEvent { public String msg; public StickyEvent(String msg) { this.msg = msg; } }
2)发布消息
EventBus.getDefault().postSticky(new StickyEvent("我是粘性事件"));
3)接收消息
//注意,和之前的方法一样,只是多了一个 sticky = true 的属性. @Subscribe(threadMode = ThreadMode.MAIN, sticky = true) public void onEvent(StickyEvent event){ tv_c_result.setText(event.msg); }
4)注册
EventBus.getDefault().register(CActivity.this);
// 接收粘性事件数据按钮的点击事件处理 bt_eventbus_send_sticky.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if(isFirstFlag) { isFirstFlag = false; // 4 注册 EventBus.getDefault().register(EventBusSendActivity.this); } } });
5)解注册
EventBus.getDefault().removeAllStickyEvents(); EventBus.getDefault().unregister(CActivity.class);
5、例子
1)主线程发送消息
2)发送粘性事件
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 基于JWT的Token登录认证 2019-07-23
- PHP新手上路(一) 2019-06-16
- PHP Array 简介 2019-04-29
- PHP全栈学习笔记12 2019-04-28
- dedecms织梦文章微信分享带缩略图与简介 2019-04-20
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash