了解什么是EventBus?
- EventBus是一款针对Android优化的发布/订阅事件总线。主要功能是替代Intent,Handler,BroadCas在Fragment,Activity,Service,线程之间传递消息.优点是开销小,代码更优雅。以及将发送者和接收者解耦。
- EventBus是一个用于简化Andorid、Fragment、Threads、Service之间信息传递的一个发布/订阅事件集。
- 什么是EventBus?区别在哪里?
EventBus是一个消息总线,以观察者模式实现,用于简化程序的组件、线程通信,
可以轻易切换线程、开辟线程。EventBus3.0跟先前版本的区别在于加入了annotation @Subscribe,取代了以前约定命名的方式。 利弊——-好处?
简单,方便,小巧,文档清晰,性能消耗少,可定制行强,耦合度低。 简化组件之间的通信方式让业务代码更加简洁(但是需要配合相应注解进行使用),可以指定事件处理方法的执行线程,和订阅者的优先级(跟广播类似), 足够的稳定,已经被很多Android应用使用,你绝对不是第一个吃螃蟹的人。下面我们一起来对EventBus的使用吧
首先引入依赖EventBus的jar包
- compile ‘org.greenrobot:eventbus:3.0.0’
在activity_main里面写:
<Button
android:id="@+id/btn_try"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="btn_bty"/>
<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
第一步:
public class MainActivity extends AppCompatActivity {
private Button but;
private TextView tv;
/**
* 在OnCreate()函数中注册EventBus,在OnDestroy()函数中反注册。所以整体的注册与反注册的代码如下:
* @param savedInstanceState
*/
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//第二步接收消息页面注册
setContentView(R.layout.activity_main);
EventBus.getDefault().register(this);
but = (Button) findViewById(R.id.btn_try);
tv = (TextView) findViewById(R.id.tv);
but.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent it=new Intent(getApplicationContext(),SecondActivity.class);
startActivity(it);
}
});
}
@Override
protected void onStart() {
super.onStart();
}
@Override
protected void onDestroy() {
super.onDestroy();
//反注册
EventBus.getDefault().unregister(this);
}
//第五步
@Subscribe(threadMode = ThreadMode.MAIN)
public void onEventMainThread(FirstEvent event){
String msg="接收到了消息:"+event.getmMSg();
Log.d("harvic",msg);
tv.setText(msg);
Toast.makeText(this,msg,Toast.LENGTH_SHORT).show();
}
}
定义事件
public class FirstEvent {
private String mMSg;
public FirstEvent(String msg){
mMSg=msg;
}
public String getmMSg(){
return mMSg;
}
}
在AndroidManifest.xml声明这个类的使用
public class SecondActivity extends AppCompatActivity {
private Button butsecond;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
butsecond = (Button) findViewById(R.id.btn_first_event);
butsecond.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//第三步发送消息
EventBus.getDefault().post(new FirstEvent("aaaaaaaaaaaaaaaaaaaaa"));
}
});
}
}
就是这们简单,ok.