您的位置:首页 > 移动开发 > Android开发

Android 效率开发之EventBus新使用方法

2015-11-08 16:13 435 查看
  最近学习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)运行效果

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: