EventBus是一款针对Android优化的发布/订阅事件总线。主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间传递消息.优点是开销小,代码更优雅。以及将发送者和接收者解耦。
个人理解:我感觉类似于 观察者模式,观察者和被观察者的关系咯 我感觉最方便的是 : 加入4个Activity, 我在其中一个Activity中改变某个值,相同时改变其他3个 ,,使用EventBus特别方便
1、到入库
compile 'de.greenrobot:eventbus:3.0.0-beta1'
写一个用于登录的Event
public class LoginEvent { private String mMsg; public LoginEvent(String mMsg) { this.mMsg = mMsg; } public String getmMsg() { return mMsg; } public void setmMsg(String mMsg) { this.mMsg = mMsg; }
}
这是 一个 类似于被观察者的Activity,比如说,是登录,,加入登录,,登录成功后,其他浏览的界面要改变登录状态吧!
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
EventBus.getDefault().post(new LoginEvent(“大龙测试咯”));
}
});这是其他界面 相当于观察者,,对方登录,,马上就自动回调
@Subscribe//这个注解一定要有哦
public void onEvent(LoginEvent evlog){
MLog.v(evlog.getmMsg());//打印日志
btn.setText(“Ceshi”+evlog.getmMsg());//设置登录成功
}
完毕,其实在 android经常会遇到类似这种的事情,,比如说,登录前和登陆后,假如登录前浏览过,然后开始登录,登录成功后,,,,之前浏览登录前的状态怎么改变? 重新加载吗? 错误的,,用这个蛮好,,,或者用 OnSharedPreferenceChangeListener 这个监听 也可以实现
假如 刚开始 sharePreferences.edit().putString(USER_Status, false).commit();
是未登录状态
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
String key) {
// TODO Auto-generated method stub
当 登录界面登录成功后 ,自动回调该方法
if(key.eq(USER_Status)){
....................//要实现的业务逻辑
}
根据key 改变 而改变 ,,假如
//改变后回调的,,一些逻辑
}
登录界面 :登录成功后,修改
harePreferences.edit().putString(USER_Status, true).commit();//修改已登录 状态