Android:使用EventBus

一、配置环境:
1.在使用到的app的build.gradle的dependencies标签中加入:
dependencies {
  compile 'org.greenrobot:eventbus:3.0.0'
}


二、使用:
1.建一个实体类作为传递用:
public class User{
   ...
}


2.在需要接收的Activity或Fragment或其他地方注册事件:
EventBus.getDefault().register(this);


3.传递实体类给接收类,内部根据实体类的类型进行区分:
EventBus.getDefault().post(new User());   //这种先register,再post,否则收不到

EventBus.getDefault().postSticky(new User());  //这种方式可以先post,后register,也能收到


4.定义一个方法接收消息(可以任意方法名,public访问权限,加@Subscribe注解):
@Subscribe(
sticky = true, //加上这句,可以先post,后register,也能收到
threadMode = ThreadMode.MAIN,
priority = 1  //改变线程优先级
)

@Subscribe(threadMode = ThreadMode.MAIN)  //可以加上“sticky = true”,以“,”分隔
public void onInfo(User user) {
   ...
   //不再接收后面的消息加上这句:EventBus.getDefault().cancelEventDelivery(user);
}
四种threadMode区别:
@Subscribe(threadMode = ThreadMode.POSTING):事件发送与接收在同一线程。
@Subscribe(threadMode = ThreadMode.MAIN):事件接收在UI线程
@Subscribe(threadMode = ThreadMode.BACKGROUND):事件在UI线程发送,则接收会在新的子线程执行,事件在子线程执行(按顺序分发所有事件),则接收也在当前子线程执行
@Subscribe(threadMode = ThreadMode.ASYNC):无论在哪个线程发送,接收都会在新建的子线程中执行


5.退出当前界面时取消注册,比如onDestroy:

EventBus.getDefault().unregister(this);




猜你喜欢

转载自blog.csdn.net/a526001650a/article/details/62422114