码迷,mamicode.com
首页 > 其他好文 > 详细

EventBus

时间:2016-11-13 07:39:38      阅读:245      评论:0      收藏:0      [点我收藏+]

标签:mod   public   注意   主线程   rri   pre   消息   adc   activity   

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)发送粘性事件

EventBus

标签:mod   public   注意   主线程   rri   pre   消息   adc   activity   

原文地址:http://www.cnblogs.com/ganchuanpu/p/6058040.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!