Android事件总线开发库EventBuser

一、什么是事件总线管理:

  • 将事件发到队列里,用于管理和分发
  • 保证应用的各个部分之间高效的通讯及数据、事件分发与接收
  • 事件的解耦,通过事件分发,让各个应用间的藕度减少
二、什么是EventBus:

EvenBus是一个发布/订阅的事件总线。RventBus模式-也被成为MessageBus或者发布者/订阅者(publisher/subscriber)模式-可以让两个组件相互通信,但是他们之间并不相互知晓。

基于事件总线管理/订阅/分发模式的。事件响应有更多的线程选择,EventBus可以向不同的线程中发布事件。EventBus支持StickyEvent。

使用时需要先注册订阅,然后向订阅者发布消息数据即可。包含4个部分:发布者,订阅者,事件,总线。订阅者可以订阅多个事件,发送者可以发布任何事件,发布者同时也可以是订阅者。分订阅、注册、取消注册等步骤。


三、EventBus与Otto的区别:



四、EventBus的基本用法:

分订阅、注册、发布、取消注册

  • 注册
EventBus.getDefault().register(this);

EventBus.getDefault().register(new MyClass());

//注册:三个参数分别是,消息订阅者(接收者),接收方法名,事件类

EventBus.getDefault().register(this,"setTextA",SetTextAEvent.class);

  • 订阅处理数据
public viod onEventMainThread{}

public void onEvent(AnyEvenType EVENT){}

onEvenPostThread、onEventBackgroundThread、onEventAsync

  • 取消注册
EventBus.getDefault().unregister(this);

EventBus.getDefault().unregister(new MyClass());


五、Demo示例:

  • 实现效果
一出点击发送数据,另一处或多出注册点可以及时获取更新传输过来的数据
  • 涉及知识点
事件类自定义、注册,订阅事件、事件的发布、数据解析、取消注册。
  • 代码
package com.example.demo_evenbus;

import de.greenrobot.event.EventBus;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity {

	private Button button;
	private TextView textView;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		button=(Button) findViewById(R.id.button1);
		textView=(TextView) findViewById(R.id.textView1);
		button.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View v) {//发送数据事件
				MyEvent my=new MyEvent();
				my.setType("1");
				my.setContent("1的内容");
				EventBus.getDefault().post(my);
			}
		});
		EventBus.getDefault().register(this);
	}
	
	//接收
	private void onEvent(MyEvent event) {
		if(event.getType().equals("0")){
			textView.setText(event.getContent());
		}
	}
	
	public void onEventMainThread(MyEvent event){
		if(event.getType().equals("1")){
			textView.setText(event.getContent());
		}
	}
	
	@Override
	protected void onDestroy() {
		super.onDestroy();
		EventBus.getDefault().unregister(this);
		
	}

}

六、总结:
EventBus在什么情况下使用合适
eventBus和Otto的效率优缺点对比
EventBus的具体实践





你可能感兴趣的:(EventBus,事件分发)