zoukankan      html  css  js  c++  java
  • EventBus用法

    什么是EventBus

    EventBus是一个Android端优化的publish/subscribe消息总线,简化了应用程序内各组件间、组件与后台线程间的通信。比如请求网络,等网络返回时通过Handler或Broadcast通知UI,两个Fragment之间需要通过Listener通信,这些需求都可以通过EventBus实现。

    添加依赖库:

    首先你要为你的app添加依赖库:

    compile 'de.greenrobot:eventbus:3.0.0-beta1'
    

    注册

    举个例子,你需要在一个activity中注册eventbus事件,然后定义接收方法,这和Android的广播机制很像,你需要首先注册广播,然后需要编写内部类,实现接收广播,然后操作UI,在EventBus中,你同样需要这么做。

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        EventBus.getDefault().register(this);
    
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        EventBus.getDefault().unregister(this);
    }
    

    订阅者

    类似广播,但是有别于2.4版本,你不必再去约定OnEvent方法开头了

    @Subscribe(threadMode = ThreadMode.MainThread)
    public void helloEventBus(String message){
        mText.setText(message);
    }
    

    该操作很简单,定义了一个hello方法,需要传入String参数,在其中操作UI操作,注意:
    我们添加了注解@Subscribe,其含义为订阅者,在其内传入了threadMode,我们定义为ThreadMode.MainThread,其含义为该方法在UI线程完成,这样你就不要担心抛出异常啦。是不是很简单?

    发布者

    既然你在某个地方订阅了内容,当然就会在某个地方发布消息。举个例子,你的这个activity需要http请求,而http请求你肯定是在异步线程中操作,其返回结果后,你可以这么写:

    String json="";
    EventBus.getDefault().post(json);
    

    原理初探

    你订阅了内容,所以你需要在该类注册EventBus,而你订阅的方法需要传入String,即你的接收信息为String类型,那么在post的时候,你post出去的也应该是String类型,其才会接收到消息。

    如果你post的是对象

    首先你需要定义一个类似pojo类:

    public class MessageEvent {
      public final String name;
      public final String password;
      public MessageEvent(String name,String password) {
        this.name = name;
        this.password=password;
      }
    }
    

    然后你post的时候:

    EventBus.getDefault().post(new MessageEvent("hello","world"));
    

    当然,你接收的方法也需要改为:

    @Subscribe(threadMode = ThreadMode.MainThread)
    public void helloEventBus(MessageEvent message){
        mText.setText(message.name);
    }
    
  • 相关阅读:
    kernel-devel-3.10.0-957.el7.x86_64.rpm kernel-headers-3.10.0-957.el7.x86_64.rpm
    解决MySQL安装:找不到msvcr120.dll和msvcp120.dll
    Node.js安装
    大数据电商数据仓库
    spark
    redis 脑裂等极端情况分析
    Redis解决并发超卖问题
    解决OutOfMemoryError: unable to create new native thread问题
    好用的java工具
    java初始化和实例化
  • 原文地址:https://www.cnblogs.com/xl-phoenix/p/7824774.html
Copyright © 2011-2022 走看看