EventBus3.0使用

来源:互联网 发布:阿里云服务器增加磁盘 编辑:程序博客网 时间:2024/05/19 05:40

使用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);    }}


layout xml文件

<?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());    }




原创粉丝点击