Android EventBus简单使用

EventBus是一款针对Android优化的发布/订阅事件总线。主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间传递消息.优点是开销小,代码更优雅。以及将发送者和接收者解耦。

1、进入Git EventBus的地址 :https://github.com/greenrobot/EventBus 找到依赖

Via Gradle:

compile 'org.greenrobot:eventbus:3.0.0'
//将这个依赖添加进Module

2.基本使用

(1)自定义一个类,可以是空类,比如:

public class AnyEventType {  
         public AnyEventType(){}  
 }  

(2)在要接收消息的页面注册:

eventBus.register(this);  

(3)发送消息

eventBus.post(new AnyEventType event);  

(4)接受消息的页面实现(共有四个函数,各功能不同,这是其中之一,可以选择性的实现,这里先实现一个):

@Subscribe(threadMode = ThreadMode.MAIN)
public void onEvent(AnyEventType event) {}  

(5)解除注册

eventBus.unregister(this);  

//代码不多,下面进入实战;


3.项目运用

(1)我们先创建一个类存储数据。

public class AnyEventTypeTest {
    private String mMsg;
    public AnyEventTypeTest(String msg) {
        // TODO Auto-generated constructor stub
        //我要发送和接收的是字符串,所以我这里就是定义的String
        mMsg = msg;
    }
    public String getMsg(){
        return mMsg;
    }
}

(2)我在需要接收的页面注册一下,我这里是在MainActivit里面接收的,所以在这里注册。

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
      //   setContentView(R.layout.activity_main);
      //   Intent intent = new Intent(MainActivity.this,SocketServer.class);
      //   startService(intent);

        //注册Event bus
        EventBus.getDefault().register(this);
}

(3)在发送的页面发送消息,我这里是从Socket接收的数据,在Server里面把消息发送过去。

public void sendMasg(){
    ServerSocket serverSocket = new ServerSocket(PROT);

             Socket accept = serverSocket.accept();
             InputStream in = accept.getInputStream();
             //socket通讯中如果有客户端发送数据过来,就赋值给msg,然后通过EventBus发送

            String msg = readCMDFromSocket(in);
            //这里用这个方法把数据发送。
            EventBus.getDefault().post(new AnyEventTypeTest(msg));

}

(4)接收消息,我是MainActivit里面绑定的,所以我在这里接收。

//这个接收消息的方法是手打的,可以直接复制我的这段话。
@Subscribe(threadMode = ThreadMode.MAIN)//←这里有点问题,EventBus3.0要添加一个这个,不然报错。
    public void onEventMainThread(AnyEventTypeTest event) {

      //event.getMsg就是获得消息。
        String msg = "收到了消息:" + event.getMsg();

        //把获取到的字符串Toast出来
        Toast.makeText(this, msg, Toast.LENGTH_LONG).show();
    }

(5)解除注册,我直接在onDestroy()解除注册。

@Override
    protected void onDestroy() {
        super.onDestroy();
        EventBus.getDefault().unregister(this);
    }
                            这个就是简单的EventBus使用了。

你可能感兴趣的:(Android)