EventBus是一个
Android端优化的publish/subscribe消息总线,简化了应用程序内各组件间、组件与后台线程间的通信。比如请求网络,等网络返回时通过Handler或Broadcast通知UI,接口回调数据,这些需求都可以通过EventBus实现。
采用消息发布/订阅的一个很大的优点就是代码的简洁性,并且能够有效地降低消息发布者和订阅者之间的耦合度。
package com.nnddkj.myeventbus;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
import util.EventBusUtil;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
/**
* EventBus使用
* 地址:https://github.com/greenrobot/EventBus
* @author Administrator
*
*/
public class MainActivity extends Activity {
private Button btn_send;
private TextView tv_message;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//注册
EventBus.getDefault().register(this);
btn_send=(Button) findViewById(R.id.btn_send);
tv_message=(TextView) findViewById(R.id.tv_message);
btn_send.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
//发送数据
String message="我要发送数据";
EventBusUtil event=new EventBusUtil();
event.setType("0");
event.setMessage(message);
EventBus.getDefault().post(event);
}
});
}
/**
* 这里是写主线程接收消息,这里有4种方式,分别是:ASYNC BACKGROUND MAIN POSTING
* @param event
*/
@Subscribe(threadMode = ThreadMode.MAIN)
public void onUserEvent(EventBusUtil event) {
//如果多个消息,可在实体类中添加type区分消息
tv_message.setText(event.getMessage());
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
//取消注册
EventBus.getDefault().unregister(this);
super.onDestroy();
}
}
package util;
/**
* 一个工具类,这里想传什么就写 什么了
* @author Administrator
*
*/
public class EventBusUtil {
private String type;
private String message;
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.nnddkj.myeventbus.MainActivity" >
<Button
android:id="@+id/btn_send"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="发送数据" />
<TextView
android:id="@+id/tv_message"
android:layout_width="fill_parent"
android:layout_height="100dp"
android:layout_below="@+id/btn_send"/>
</RelativeLayout>