Android BroadcastReceiver和EventBus区别

举报
帅次 发表于 2024/02/18 17:11:49 2024/02/18
【摘要】 ​一、BroadcastReceiverAndroid 面试题之 BroadcastReceiver 使用+实例二、EventBusEventBus 是一个非常有用的库,简化组件之间的通信。它允许组件在不直接相互耦合的情况下进行通信。2.1 添加依赖项        在你的 build.gradle 文件中添加 EventBus 依赖项:implementation("org.greenro...

一、BroadcastReceiver

Android 面试题之 BroadcastReceiver 使用+实例

二、EventBus

EventBus 是一个非常有用的库,简化组件之间的通信。它允许组件在不直接相互耦合的情况下进行通信。

2.1 添加依赖项

        在你的 build.gradle 文件中添加 EventBus 依赖项:

implementation("org.greenrobot:eventbus:3.3.1")

2.2 创建事件类

        创建一个事件类,用于包含你想要在不同组件之间传递的信息。

public class MessageEvent {
    private String message;

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

    public String getMessage() {
        return message;
    }
}

2.3 发布事件

        在你想要发送事件的地方发布事件。

EventBus.getDefault().post(new MessageEvent("EventBus-SCC!"));


2.4 注册和取消注册

        在你的Activity或者Fragment中,注册和取消注册 EventBus。如果只是发送事件,不需要注册和取消。只有在接收事件的时候才需要注册。

@Override
public void onStart() {
    super.onStart();
    EventBus.getDefault().register(this);
}

@Override
public void onStop() {
    EventBus.getDefault().unregister(this);
    super.onStop();
}

2.5 接收事件

        在接收事件的组件中创建一个订阅方法来处理事件。

@Subscribe(threadMode = ThreadMode.MAIN)
public void onMessageEvent(MessageEvent event) {
    String message = event.getMessage();
    // 处理收到的消息
}

        确保订阅方法上有 @Subscribe 注解,并且你可以使用 threadMode 参数来指定事件处理在哪个线程中执行。

注意事项:

  • 确保订阅者和发布者是在相同的 EventBus 实例中
  • 不要发布空事件,确保你的事件类是一个有效的 POJO(Plain Old Java Object)。

        记住,EventBus 虽然是一种方便的通信方式,但过度使用可能导致代码的可读性和维护性下降

三、BroadcastReceiver和EventBus区别

1.广播是四大组件之一,EventBus是开源框架;
2. 广播不能直接执行耗时操作,如果超过10秒,会导致 ANR;
3.广播非常消耗资源,而EventBus非常轻量;
4.EventBus切换线程非常方便,只需要修改下注解就行了;
5.广播可以跨进程,而EventBus不可以。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。