Android之EventBus1.0 和EventBus3.0的使用详解
2017-02-14 00:00
176 查看
摘要: EventBus使用详解
当Android项目越来越庞大的时候,应用的各个部件之间的通信变得越来越复杂,那么我们通常采用的就是Android中的解耦组件EventBus。EventBus是一款针对Android优化的发布/订阅事件总线。主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间传递消息.优点是开销小,代码更优雅。以及将发送者和接收者解耦。
EventBus文档:http://greenrobot.org/eventbus/documentation
EventBus源码: https://github.com/greenrobot/EventBus.git
EventBus1.0
首先你要为你的app添加依赖库:
Activity中使用有三部:
1.注册(onCreate方法下)
2.监听(自定义方法即可)
3.解除注册(onDestroy方法下)
然后就是发布事件让监听事件接受通信信息,在更新UI操作,相关代码如下:
Activity
通信的Activity
效果如下图:(包含用户名和退出的通信)
EventBus3.0
首先你要为你的app添加依赖库:
注册和解除注册相同,监听事件有所改变
threadMode的之有四个:
NAIN UI主线程
BACKGROUND 后台线程
POSTING 和发布者处在同一个线程
ASYNC 异步线程
也可以订阅事件的优先级,需加参数 ,如下:
除了上面一种事件外,EventBus还有一种黏性事件,意思就是先发布事件,在注册也能监听得到,用postSticky来发布。
EventBus3.0效果如下图:(包含用户名的两种通信方式)
当Android项目越来越庞大的时候,应用的各个部件之间的通信变得越来越复杂,那么我们通常采用的就是Android中的解耦组件EventBus。EventBus是一款针对Android优化的发布/订阅事件总线。主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间传递消息.优点是开销小,代码更优雅。以及将发送者和接收者解耦。
EventBus文档:http://greenrobot.org/eventbus/documentation
EventBus源码: https://github.com/greenrobot/EventBus.git
EventBus框架中涉及四个成分
订阅者,发布者,订阅事件,事件总线 它们的关系可以用官方的图表示:EventBus1.0
首先你要为你的app添加依赖库:
compile 'org.simple:androideventbus:1.0.5.1'
Activity中使用有三部:
1.注册(onCreate方法下)
EventBus.getDefault().register(this);
2.监听(自定义方法即可)
@Subscriber(tag = Utils.RESULTDATA) public void resultData(String title) { username.setText(title); }
3.解除注册(onDestroy方法下)
EventBus.getDefault().unregister(this);
然后就是发布事件让监听事件接受通信信息,在更新UI操作,相关代码如下:
Activity
/****
* eventbus通信
* 1.0版本
*/
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
EditText username;
EditText password;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setTitle("登录界面");
setContentView(R.layout.activity_main);
EventBus.getDefault().register(this);
initView();
}
private void initView()
{
username=(EditText)findViewById(R.id.username);
password=(EditText)findViewById(R.id.password);
findViewById(R.id.login).setOnClickListener(this);
findViewById(R.id.register).setOnClickListener(this);
}
/***
* (String)->这里可以是任意类型--(在返回的时候对应就行)
* @param title
*/
@Subscriber(tag = Utils.RESULTDATA) public void resultData(String title) { username.setText(title); }
//退出
@Subscriber(tag=Utils.EXIT)
public void exit(boolean isFang)
{
if (isFang) {
finish();
}
}
@Override
public void onClick(View v) {
String name=username.getText().toString();
String pwd=password.getText().toString();
switch (v.getId())
{
case R.id.login:
break;
case R.id.register:
startActivity(new Intent(MainActivity.this,RegisterActivity.class));
break;
}
}
/***
* 解除注册
*/
@Override
protected void onDestroy() {
super.onDestroy();
EventBus.getDefault().unregister(this);
}
}
通信的Activity
public class RegisterActivity extends AppCompatActivity implements View.OnClickListener{ EditText username; LinearLayout linearLayout; Button register; Button exit; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); this.setTitle("注册界面"); EventBus.getDefault().register(this); initView(); } private void initView() { username=(EditText)findViewById(R.id.username); linearLayout=(LinearLayout)findViewById(R.id.linear); linearLayout.setVisibility(View.GONE); register=(Button) findViewById(R.id.login); register.setText("注册"); register.setOnClickListener(this); exit=(Button)findViewById(R.id.register); exit.setText("退出"); exit.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.login://注册 String string=username.getText().toString(); if (TextUtils.isEmpty(string)) { Toast.makeText(getApplicationContext(),"用户名不能为空",Toast.LENGTH_LONG).show(); } else { //发布事件 EventBus.getDefault().post(string,Utils.RESULTDATA); finish(); } break; case R.id.register://退出 EventBus.getDefault().post(true,Utils.EXIT); finish(); break; } } /*** * 解除注册 */ @Override protected void onDestroy() { super.onDestroy(); EventBus.getDefault().unregister(this); } }
效果如下图:(包含用户名和退出的通信)
EventBus3.0
首先你要为你的app添加依赖库:
compile'org.greenrobot:eventbus:3.0.0'
注册和解除注册相同,监听事件有所改变
@Subscribe(threadMode = ThreadMode.MAIN) public void onUserName(User user) { username.setText(user.getUsername()); }
threadMode的之有四个:
NAIN UI主线程
BACKGROUND 后台线程
POSTING 和发布者处在同一个线程
ASYNC 异步线程
也可以订阅事件的优先级,需加参数 ,如下:
/** * priority:事件的优先级类似广播的优先级,优先级越高优先获得消息 * 在ui线程执行 * @param user */ @Subscribe(threadMode = ThreadMode.MAIN,priority = 100) public void onUserName(User user) { username.setText(user.getUsername()); }
除了上面一种事件外,EventBus还有一种黏性事件,意思就是先发布事件,在注册也能监听得到,用postSticky来发布。
EventBus.getDefault().postSticky(user);
/** * sticky。 * 方式2 */ @Subscribe(sticky = true) public void onExit(User user) { username.setText(user.getUsername()); }
EventBus3.0效果如下图:(包含用户名的两种通信方式)
源码点击下载
相关文章推荐
- Android之EventBus1.0 和EventBus3.0的使用详解
- Android之EventBus1.0 和EventBus3.0的使用详解
- Android消息传递之EventBus 3.0使用详解(三)
- Android EventBus组件间通信的使用及详解
- Android消息传递之EventBus 3.0使用详解
- Android消息传递之EventBus 3.0使用详解
- Android消息传递之EventBus 3.0使用详解
- Android消息传递之EventBus 3.0使用详解
- (转)Android消息传递之EventBus 3.0使用详解
- Android EventBus使用详解
- Android之EventBus使用详解
- Android消息传递之EventBus 3.0使用详解(转载)
- Android消息传递之EventBus 3.0使用详解
- android EventBus 3.0 简单使用
- Android开发之EventBus的简单使用
- Android消息传递之EventBus 3.0使用与案例
- Android EventBus 的简单使用
- Android——EventBus3.0的使用详解
- Android EventBus的基本使用
- EventBus使用详解(一)——初步使用EventBus