1、简介
EventBus是在处理组件之间、组件与后台线程之间的消息传递;原理是通过注解和反射机制将订阅者和订阅函数保存起来,然后在发送订阅的时候遍历订阅函数数组调用。
2、使用
依赖eventbus库 compile "org.greenrobot:eventbus:3.1.1"
A:一般事件
1:发送消息
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private Button tiaozhuanBtn;
private TextView tv1;
private TextView tv2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
//实例化
private void initView() {
tiaozhuanBtn = (Button) findViewById(R.id.tiaozhuan_btn);
tv1 = (TextView) findViewById(R.id.tv1);
tv2 = (TextView) findViewById(R.id.tv2);
tiaozhuanBtn.setOnClickListener(this);
//注册
EventBus.getDefault().register(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
//反注册
EventBus.getDefault().unregister(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.tiaozhuan_btn:
startActivity(new Intent(this, LoginActivity.class));
break;
default:
}
}
//接受消息方法,需要@Subscribe
@Subscribe
public void getMessage(Bean bean){
tv1.setText(bean.getAccount());
tv2.setText(bean.getPassword());
}
2:接受消息类
public class Bean implements Serializable {
private String account;
private String password;
public Bean(String account, String password) {
this.account = account;
this.password = password;
}
public String getAccount() {
return account;
}
public void setAccount(String account) {
this.account = account;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "Bean{" +
"account='" + account + '\'' +
", password='" + password + '\'' +
'}';
}
}
3:发送消息
public class LoginActivity extends AppCompatActivity implements View.OnClickListener {
private Button fanhuiBtn;
private EditText tv1;
private EditText tv2;
private String gettv1, gettv2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
initView();
}
private void initView() {
fanhuiBtn = (Button) findViewById(R.id.fanhui_btn);
tv1 = (EditText) findViewById(R.id.tv1);
tv2 = (EditText) findViewById(R.id.tv2);
fanhuiBtn.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.fanhui_btn:
gettv1 = tv1.getText().toString().trim();
gettv2 = tv2.getText().toString().trim();
//发送消息
if (!"".equals(gettv1) && !"".equals(gettv2)) {
EventBus.getDefault().post(new Bean(gettv1, gettv2));
finish();
}
break;
default:
}
}
}
4:页面流程
MainActivity:注册、反注册、构造消息、接受消息
LoginActivity:发送信息