EventBus3.0的简单使用

首先引入依赖

implementation 'org.greenrobot:eventbus:3.1.1'

以activity举例 实现不在onclick方法中执行修改逻辑 点击button 修改textview的内容

1,首先创建一个javaBean类  Msg  ,充当要传递的事件(事件中含有要传递的数据)

//待传递的事件
public class Msg {
    public String data;
    //待传递事件中包含的数据
    public Msg(String data) {
        this.data = data;
    }
}

2,创建订阅该事件的方法,即响应方法

3,在Activity的onCreate方法中注册事件总线(官方推荐onStart)但看到其他文章中有提到在onStart中注册有几率出现接收消息延迟,故提前注册

4,在onDestory方法中注销事件总线(官方推荐onStop)

5,在事件的触发点执行处理逻辑,发送事件

package com.example.rxjavatest;

import android.os.Bundle;
import android.util.EventLog;
import android.widget.Button;
import android.widget.TextView;

import androidx.appcompat.app.AppCompatActivity;

import com.example.rxjavatest.Message_EventBus.Msg;

import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;

import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;

public class Main2Activity extends AppCompatActivity {

    @BindView(R.id.button)
    Button button;
    @BindView(R.id.textView)
    TextView textView;

    //订阅事件(事件触发时回调该方法)    2
    @Subscribe(threadMode = ThreadMode.MAIN)
    public void getMsg(Msg msg) {
        textView.setText(msg.data);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        ButterKnife.bind(this);
        //注册事件总线   3
        EventBus.getDefault().register(this);
    }

    //当点击button时启动一个线程模拟处理流程   5
    @OnClick(R.id.button)
    public void onViewClicked() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    Thread.sleep(2000);
                    EventBus.getDefault().post(new Msg("需要传递的内容"));
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

            }
        }).start();
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        //注销事件总线    4
    }

}

发布了39 篇原创文章 · 获赞 15 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_29478763/article/details/102695357