EventBus3 笔记

eventbus是安卓开发中常用的消息传递工具,能够有效对发送方与接收方解耦合。

配置eventbus

在build.gradle中,在依赖中添加:

implementation 'org.greenrobot:eventbus:3.1.1'

普通消息实现 

普通消息的特点是,消息发送时若无接收方进行接受,则此消息作废。

消息类型

消息类型通常由自定义的类实现:

public class Message {
    private String name;
    private int age;

    public Message(String name,int age){
        this.name = name;
        this.age = age;
    }

    public String getName(){
        return this.name;
    }

    public int getAge(){
        return this.age;
    }

    public void setName(String name){
        this.name = name;
    }

    public void setAge(int age){
        this.age = age;
    }
}

该消息类型中包含两个数据,一个是名字,一个是年龄。

消息发送

EventBus.getDefault().post(new Message("kuaile",22));

EventBus.getDefault()获得eventbus的一个实例,该类是一个单例模式。

我们实现一个信息对象,并为其成员变量赋值,该对象就是我们要传递的信息。

信息接受

信息接收方需要进行注册信息接受,并且在退出后解除注册。

//注册eventbus
EventBus.getDefault().register(this);
 //  解除注册eventbus
    @Override
    protected void onDestroy(){
        super.onDestroy();
        if (EventBus.getDefault().isRegistered(this)){
            EventBus.getDefault().unregister(this);
        }
    }

注册内容实现后需要实现信息的接收:


    @Subscribe(threadMode = ThreadMode.POSTING)
    public void onEvent(Message message){
        if(message != null){
            Toast.makeText(this,"name "+message.getName()+" age "+message.getAge(),Toast.LENGTH_SHORT).show();
        }
    }

在接收函数中要实例化一个消息类型的对象,并同时读取消息。

粘性消息实现

粘性消息的特点是,即便消息已经发送出去,也就是经过了发信息的时间点,之后注册的接收方照样可以接受到此信息。

信息发送

EventBus.getDefault().postSticky(new Message("huankuai",21));

信息注册

信息注册的内容与普通信息完全一样。

信息接收

    @Subscribe(threadMode = ThreadMode.POSTING,sticky = true)
    public void onEvent(Message message){
        if(message != null){
            Toast.makeText(this,"name "+message.getName()+" age "+message.getAge(),Toast.LENGTH_SHORT).show();
        }
    }

粘性信息的接收函数仅比普通消息多一个参数。

ThreadMode

posting:发布事件与接收事件在一个线程中,应尽量避免耗时操作,否则容易阻塞事件传递。

main:事件的处理在主线程中进行。

background:如果事件从主线程中发布,则在子线程中处理事件;如果事件从子线程发布,则在该子线程中处理。

async:无论事件从哪个线程发布,都要创建一个新线程处理事件。

猜你喜欢

转载自blog.csdn.net/m0_37872216/article/details/126263104