💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
github地址:[https://github.com/greenrobot/EventBus](https://github.com/greenrobot/EventBus) #### 添加依赖 ~~~ compile 'org.greenrobot:eventbus:3.1.1' ~~~ #### 定义传递对象 当然如果你传递的是String类型这种,就不用定义这个了。方法名称任意,比如Student。 ~~~ public static class MessageEvent { /* Additional fields if needed */ } ~~~ #### 注册和解除注册 ~~~ @Override public void onStart() { super.onStart(); EventBus.getDefault().register(this); } @Override public void onStop() { super.onStop(); EventBus.getDefault().unregister(this); } ~~~ 以上是github上推荐的方式,当然也可以放到onCreate和onDestroy中,比如这种。 ~~~ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); EventBus.getDefault().register(this); } @Override protected void onDestroy() { super.onDestroy(); if(EventBus.getDefault().isRegistered(this)) { EventBus.getDefault().unregister(this); } } ~~~ #### 发送事件 一行代码即可,参数就是定义的实体类(或者是个String类型这种) ~~~ EventBus.getDefault().post(messageEvent); ~~~ #### 接收事件 接收事件的方法名称任意,但是必须添加注解@Subscribe,同时接收参数类型要和发送的一致。比如有两个接收方法,会找到参数一致的来执行。 ~~~ @Subscribe(threadMode = ThreadMode.POSTING) public void test(MessageEvent messageEvent) { TextView tv = findViewById(R.id.tv); tv.setText(messageEvent.getMessage()); } ~~~ 上面注解有个线程模型POSTING,这个是默认的。EventBus3.0有四种线程模型,分别是: ~~~ POSTING (默认) 表示事件处理函数的线程跟发布事件的线程在同一个线程。 MAIN 表示事件处理函数的线程在主线程(UI)线程,因此在这里不能进行耗时操作。 BACKGROUND 表示事件处理函数的线程在后台线程,因此不能进行UI操作。如果发布事件的线程是主线程(UI线程),那么事件处理函数将会开启一个后台线程,如果果发布事件的线程是在后台线程,那么事件处理函数就使用该线程。 ASYNC 表示无论事件发布的线程是哪一个,事件处理函数始终会新建一个子线程运行,同样不能进行UI操作。 ~~~