【Android开发--新手必看篇】依赖框架EventBus的使用

Android笔记

​ ——EventBus
若对该知识点有更多想了解的,欢迎私信博主~~

依赖框架:EventBus
一:优势及作用
  1. 分离事件发送者和接收者
  2. 在Activity、Fragment和后台线程中也可以方便使用
  3. 高度解耦,解决了生命周期的问题
  4. 代码更加简洁
二:EventBus的配置
  1. 分build.gradle中添加(注入依赖)

    dependencies {
    	implementation 'org.greenrobot:eventbus:3.1.1'
    }
    
三:使用
  1. 定义一个用于事件类

    public class UserEvent {
        private User user;
    
        public UserEvent(User user) {
            this.user = user;
        }
    
        public User getUser() {
            return user;
        }
    
        public void setUser(User user) {
            this.user = user;
        }
    }
    
  2. 在接收的地方(此处为Activity)注册EventBus

    //MainActivity
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //绑定控件
        initView();
    	//为该Activity注册EventBus
        EventBus.getDefault().register(this);
    }
    
  3. 定义一个方法用来接收信息

    //MainActivity
    //参数1:四种线程模型
    //参数2:黏性事件,事件处理函数会在Activity UI创建之前,利用黏性事件,可以在创建完UI后再运行一次
    //参数3:优先级,例如有两个OnEvent与threadMode相同的Activity,优先级越高,越早执行,默认为0。
    //因为事件有继续分发性,若是不想让以后的Activity也接收,可以利用优先级
    //EventBus.getDefault().cancelEventDelivery(message);来停止
    @Subscribe(threadMode = ThreadMode.POSTING, sticky = true)
    public void OnEvent(UserEvent userEvent) {
        Log.e("aaa","1.UserEvent");
        tvFirst.setText(userEvent.getUser().getId());
    }
    
    线程模型说明
    POSTING默认,表示事件处理函数的线程与事件发布的线程为同一个
    MAIN表示事件处理函数的线程在主线程(UI)线程中,不能进行耗时操作
    BACKGROUND表示事件处理函数的线程在后台线程中,不能进行UI操作
    如果发布事件在主线程里,那事件处理函数则在后台开新线程
    如果发布事件在后台线程里,则事件处理函数在同一个
    ASYNC表示无论事件发布的线程在哪一个,事件处理函数的线程都会新建一个子线程,不能进行UI
  4. 在需要发布的地方(此处为SecondActivity)发布事件

    //post()--普通发布事件,postSticky()--发布黏性事件接收的信息
    //由此看出,不仅可以发布String、Boolean等普通值,还可以发布对象,所有注册EventBus都可
    //以接收
    EventBus.getDefault().postSticky(new UserEvent(user));
    
  5. 销毁(可以不写)

    @Override
    protected void onDestroy() {
        super.onDestroy();
        EventBus.getDefault().unregister(this);
    }
    
参考文档:
  1. https://www.jianshu.com/p/e7d5c7bda783
  2. https://github.com/greenrobot/EventBus
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
EventBusAndroid 开发中一款非常实用的事件发布/订阅框架,它可以帮助开发者更方便地进行组件间通信,减少代码耦合度,提高代码复用性。在使用 EventBus 过程中,回调函数是非常重要的组成部分,下面我们来一起学习一下如何使用 EventBus 进行回调。 首先,在使用 EventBus 进行回调之前,需要先进行 EventBus 的注册和注销操作。在 Activity 或 Fragment 中注册 EventBus 的代码如下: ```java @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 注册 EventBus EventBus.getDefault().register(this); } ``` 在 Activity 或 Fragment 销毁时,需要进行注销操作,代码如下: ```java @Override protected void onDestroy() { super.onDestroy(); // 注销 EventBus EventBus.getDefault().unregister(this); } ``` 接下来,我们来看一下如何使用 EventBus 进行回调。假设我们有一个 Activity A,需要从另一个 Activity B 中获取数据并进行处理,在 Activity A 中,我们可以定义一个事件,如下: ```java public class DataEvent { private String data; public DataEvent(String data) { this.data = data; } public String getData() { return data; } } ``` 在 Activity B 中,我们可以通过 EventBus 发送该事件,并传递数据,如下: ```java EventBus.getDefault().post(new DataEvent("Hello EventBus!")); ``` 在 Activity A 中,我们需要定义一个方法来接收该事件,并进行相应的处理,代码如下: ```java @Subscribe(threadMode = ThreadMode.MAIN) public void onDataEvent(DataEvent event) { String data = event.getData(); // 处理数据 } ``` 在这个方法上使用了 @Subscribe 注解,表示该方法用来接收事件,threadMode = ThreadMode.MAIN 表示该方法在主线程中执行。当 Activity A 接收到事件后,该方法就会被调用,并将事件中传递的数据作为参数传递给该方法。这样,我们就实现了通过 EventBus 进行回调的功能。 需要注意的是,使用 EventBus 进行回调时,需要保证订阅者和发布者在同一进程中,否则无法接收到事件。另外,在使用 EventBus 进行回调时,建议使用事件模型,将数据封装成事件对象,这样可以更好地进行解耦和管理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值