使用EventBus降低耦合性
1、添加依赖
compile 'org.greenrobot:eventbus:3.0.0'
2、在MainActivity中发送消息,我是在onStop()方法中发送的消息,这个可以根据自己的需要灵活使用
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.btn_send_message).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(MainActivity.this,SecondActivity.class));
}
});
}
@Override
protected void onStop() {
super.onStop();
MessageBean bean=new MessageBean();
bean.setMessage("你好");
EventBus.getDefault().post(bean);
}
}
<?xml version="1.0" encoding="utf-8"?>
<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"
tools:context="net.edaibu.eventbusdemo.MainActivity">
<Button
android:id="@+id/btn_send_message"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:text="发消息"/>
</RelativeLayout>
3、消息实体类
public class MessageBean {
private String mMessage;
private String message;
public MessageBean(){}
public MessageBean(String message){
this.mMessage=message;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
4、接收消息的Activity 在onCreate()中注册EventBus,在onDestory()中取消注册
public class SecondActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//注册EventBus
EventBus.getDefault().register(this);
}
//在ui线程执行
@Subscribe(threadMode = ThreadMode.MAIN)
public void receiveMainMessage(MessageBean event) {
Log.e("tag", "event---->" +event+"_____mainMessage="+ event.getMessage());
Toast.makeText(this,event.getMessage(),Toast.LENGTH_SHORT).show();
}
//在background线程执行
@Subscribe(threadMode = ThreadMode.BACKGROUND)
public void receiveMessageBackground(MessageBean event) {
Log.e("tag", "event---->" +event+"_____backgroundMessage="+ event.getMessage());
}
//在async线程执行
@Subscribe(threadMode = ThreadMode.ASYNC)
public void receiveMessageAsync(MessageBean event) {
Log.e("tag", "event---->" +event+"_____asyncMessage="+ event.getMessage());
}
//在posting线程执行
@Subscribe(threadMode = ThreadMode.POSTING)
public void receiveMessagePosting(MessageBean event) {
Log.e("tag", "event---->" +event+"_____postingMessage="+ event.getMessage());
}
@Override
protected void onDestroy() {
super.onDestroy();
//取消注册EventBus
EventBus.getDefault().unregister(this);
}
}
5、Demo中分别在EventBus的四个接收方法中打印了log,依次执行的顺序如下
ThreadMode.MAIN-->ThreadMode.POSTING-->ThreadMode.ASYNC->ThreadMode.BACKGROUND
’
6、当然也可以通过设置优先级来改变接收顺序 ,如下对ThreadMode.POSTING设置priority=100,优先级最高,则ThreadMode.POSTING先接收到数据
//在posting线程执行
@Subscribe(threadMode = ThreadMode.POSTING,priority = 100)
public void receiveMessagePosting(MessageBean event) {
Log.e("tag", "event---->" +event+"_____postingMessage="+ event.getMessage());
}