最近学习EventBus的使用时发现关于EventBus的使用好多还都是以前的使用方法,然而EventBus的使用早已不同了,下面链接的这篇文章中介绍了EventBus的新用法,可以作为参考与借鉴 Android–>EventBus 3.0新版使用说明(及其使用方法) ,今天写的小Demo作为分享。
EventBus介绍
EventBus 可以简单的理解为传递消息,EventBus实现了对程序组件的解耦,使得消息传递更加方便,比如我们需要通过Intent来进行数据之类的 传递,现在可以直接通过EventBus 的post方法传递。
EventBus的使用
1、如果使用的是Eclipse:需要从GitHub上下载EventBus(https://github.com/greenrobot/EventBus)`
2、如果使用的是AndroidStudio:直接搜索即可。
3、EventBus的代码编写可以分为三部分来看
(1)Message类,用作消息传递时的传递对象
(2)Receive类,用于接收EventBus发送的对象,并进行相关操作
(3)Post类,用于发送EventBus的类
ps:对EventBus的理解最好的还是下面这张图:
4、Demo
(1)Message类
public class MessageEvent {
private String msg;
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
(2)Receiver类
该类用于接收EventBus发的消息,首先是需要在onCreate()和onDestroy()方法中进行注册与反注册,之后是onUserEvent()方法用于消息处理的相关操作,注意 @Subscribe()语句不能丢失。
public class MainActivity extends AppCompatActivity {
private Button mButtonClick;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//注册EventBus
EventBus.getDefault().register(this);
mButtonClick= (Button) findViewById(R.id.button_click);
mButtonClick.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent=new Intent(getApplicationContext(),MyService.class);
startService(intent);
}
});
}
//在发送者调用post方法后将会执行下面的方法
@Subscribe(threadMode = ThreadMode.MainThread) //在ui线程执行
public void onUserEvent(MessageEvent event) {
Log.d("",""+event.getMsg());
mButtonClick.setText(event.getMsg() +"");
}
@Override
protected void onDestroy() {
super.onDestroy();
EventBus.getDefault().unregister(this);//反注册EventBus
}
}
(3)Post类
该类主要用于EventBus通过post()方法发送消息。
public class MyService extends Service {
private int i=0;
@Override
public void onCreate() {
super.onCreate();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
new Thread(new Runnable() {
@Override
public void run() {
MessageEvent event=new MessageEvent();
event.setMsg(""+i);
EventBus.getDefault().post(event);
i++;
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
return super.onStartCommand(intent, flags, startId);
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
}
(4)运行效果