Android消息传递之EventBus 3.0使用
2017-07-14 17:50
525 查看
需求
在做项目的时候碰到一个需求,点击fragment中的一个按钮,这个fragment所属的activity的界面也要发生改变,当然我们也可以用广播来实现这个需求,但是EventBus就是为这个环境而生的,怎么能忘记它呢?EventBus主要用于事件的发布和订阅。
使用
1、首先在build.gradle中添加依赖:
compile 'org.greenrobot:eventbus:3.0.0'
2、定义一个事件的类
public class DataEvent { private String msg; public DataEvent(String msg) { this.msg = msg; } public String getMsg(){ return this.msg; } }
3、EventBus的一些方法
//订阅 EventBus.getDefault().register(this);
//取消订阅 EventBus.getDefault().unregister(this);
//发布事件 EventBus.getDefault().post(new DataEvent("事件发布啦!!!"));
//事件的处理 // ThreadMode总共四个: // NAIN 主线程 // BACKGROUND 子线程 // POSTING 和发布者处在同一个线程 // ASYNC 异步线程 @Subscribe(threadMode = ThreadMode.MAIN) //在ui线程执行 public void mEvent(DataEvent event) { text_1.setText(event.getMsg()); Toast.makeText(this, event.getMsg(), Toast.LENGTH_SHORT).show(); }
4、下面直接上完整的代码
EventBus1Activity.java
public class EventBus1Activity extends AppCompatActivity {
private Button btn_1;
private TextView text_1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_event_bus1);
initViews();
//订阅 EventBus.getDefault().register(this);
btn_1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(EventBus1Activity.this,
EventBus2Activity.class);
startActivity(intent);
}
});
}
//事件的处理 // ThreadMode总共四个: // NAIN 主线程 // BACKGROUND 子线程 // POSTING 和发布者处在同一个线程 // ASYNC 异步线程 @Subscribe(threadMode = ThreadMode.MAIN) //在ui线程执行 public void mEvent(DataEvent event) { text_1.setText(event.getMsg()); Toast.makeText(this, event.getMsg(), Toast.LENGTH_SHORT).show(); }
private void initViews() {
btn_1 = (Button) findViewById(R.id.btn_1);
text_1 = (TextView) findViewById(R.id.text_1);
}
@Override
protected void onDestroy() {
super.onDestroy();
//取消订阅 EventBus.getDefault().unregister(this);
}
}
EventBus2Activity.java
public class EventBus2Activity extends AppCompatActivity {
private Button btn_1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_event_bus2);
initViews();
btn_1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//发布事件 EventBus.getDefault().post(new DataEvent("事件发布啦!!!"));
}
});
}
private void initViews() {
btn_1 = (Button) findViewById(R.id.btn_2);
}
}
最后
不要忘了添加混淆规则
-keepattributes *Annotation* -keepclassmembers class ** { @org.greenrobot.eventbus.Subscribe <methods>; } -keep enum org.greenrobot.eventbus.ThreadMode { *; } # Only required if you use AsyncExecutor -keepclassmembers class * extends org.greenrobot.eventbus.util.ThrowableFailureEvent { <init>(java.lang.Throwable); }
相关文章推荐
- Android消息传递之EventBus 3.0使用详解
- (转)Android消息传递之EventBus 3.0使用详解
- Android消息传递之EventBus 3.0使用与案例
- Android消息传递之EventBus 3.0使用详解(转载)
- Android消息传递之EventBus 3.0使用详解
- Android消息传递之EventBus 3.0使用详解
- Android消息传递之EventBus 3.0使用详解(三)
- Android消息传递之EventBus 3.0使用详解
- Android消息传递之EventBus 3.0使用详解
- Android消息传递之EventBus 3.0
- Android事件总线之EventBus3.0基本使用
- android EventBus 3.0使用指南
- android EventBus 3.0使用指南
- android EventBus 3.0使用指南
- android EventBus 3.0 简单使用
- Android 框架学习1:EventBus 3.0 的特点与如何使用
- Android 框架学习1:EventBus 3.0 的特点与如何使用
- Android EventBus 3.0.0 使用总结
- EvnetBus消息传递 优化写法较传统写法更好理解、使用
- EventBus 3.0使用详解