EventBus的简单使用

本文介绍EventBus在Android中的应用,展示如何通过简单的代码实现事件的发布与订阅,提高组件间的解耦,包括添加依赖、注册与解注册、创建实体类及发送与接收消息等步骤。

概述

EventBus是一个Android事件发布/订阅框架,通过解耦发布者和订阅者简化Android事件传递,这里的事件可以理解为消息。事件传递既可以用于Android四大组件间通讯,也可以用于异步线程和主线程间通讯等。
传统的事件传递方式包括:Handler、BroadcastReceiver、Interface回调,相比之下EventBus的有点是代码简洁,使用简单,并将事件发布和 订阅充分解耦

1.第一步添加类库,
//eventbus传递信息
implementation 'org.greenrobot:eventbus:3.1.1'

2.通俗的说

建一个A类(接收的),

onCreate里面注册
EventBus.getDefault().register(this);
onDestroy里面解注册
EventBus.getDefault().unregister(this);

在创建订阅方法,当接收到事件的时候,会调用该方法

    @Subscribe(threadMode = ThreadMode.MAIN)
    public void onEvent(Event messageEvent) {
        Log.e("TAG", "------------>"+ messageEvent.getMessage());
        Toast.makeText(MainActivity.this, messageEvent.getMessage(), Toast.LENGTH_SHORT).show();
    }

创建一个实体类

public class Event {
    private String message;

    public Event(String message) {
        this.message = message;
    }

    public String getMessage() {
        return message;
    }
}

在B类中发送消息,A类中onEvent方法中接收

B类中发送消息事件

//发送事件
EventBus.getDefault().post(new Event("Just do it"));

build.gradle中添加//eventbus传递信息
implementation 'org.greenrobot:eventbus:3.1.1'

完整代码

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    public Button button;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button = findViewById(R.id.button);
        button.setOnClickListener(this);
        //注册事件
        EventBus.getDefault().register(this);
    }


    @Override
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.button://点击进去另一个类,在另一个类中发消息事件
                Intent intent = new Intent(this, LoginActivity.class);
                startActivity(intent);
                break;
        }
    }

    //订阅方法,当接收到事件的时候,会调用该方法
    @Subscribe(threadMode = ThreadMode.MAIN)
    public void onEvent(Event messageEvent) {
        Log.e("TAG", "------------>"+ messageEvent.getMessage());
        Toast.makeText(MainActivity.this, messageEvent.getMessage(), Toast.LENGTH_SHORT).show();
    }
//解注册
    @Override
    public void onDestroy() {
        super.onDestroy();
        EventBus.getDefault().unregister(this);
    }
}

另一个类

public class LoginActivity extends AppCompatActivity  implements View.OnClickListener {
    Button login_image_QQlogin;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        login_image_QQlogin = findViewById(R.id.login_image_QQlogin);

        login_image_QQlogin.setOnClickListener(this);
    }


    @Override
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.login_image_QQlogin :
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        //发送事件
                        EventBus.getDefault().post(new Event("Just do it"));
                    }
                }).start();
                break;
        }
    }
}

实体类

public class Event {
    private String message;

    public Event(String message) {
        this.message = message;
    }

    public String getMessage() {
        return message;
    }
}

在哪接收事件就在哪个类中注册解注册,重写接收方法,深入了解EventBus的话建议去官网看看源码

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值