• EventBus 3.0 的基本使用


    EventBus 3.0 的基本使用

    1.什么是EventBus?

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

    2.使用EventBus有什么好处?

    采用消息发布/订阅的一个很大的优点就是代码的简洁性,并且能够有效地降低消息发布者和订阅者之间的耦合度。

    3.EventBus 3.0 的使用

    1. 在 AndroidStudio中添加依赖:
      compile ‘org.greenrobot:eventbus:3.0.0’

    2.注册和注销

    你需要在一个Activity或者Fragment中注册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);
    }  
    

    3.定义事件

    Event 大专栏  EventBus 3.0 的基本使用s 就是一个普通的JavaBean,没有任何特殊要求,例如:

    public class MessageEvent {
    public final String message;
    
    public MessageEvent(String message) {
        this.message = message;
        }        
    }
    

    4.订阅者

    准备subcriber的回调method,来处理post event,从EventBus 3.0 开始,用注解@Subscribe来定义subscriber的回调method,方法名可以任意定义。
    例如:

    @Subscribe(threadMode = ThreadMode.POSTING)
    public void onMessageEvent(MessageEvent event) {
         Toast.makeText(getActivity(), event.message, Toast.LENGTH_SHORT).show(); 
    }
    

    在这个方法上面添加 @Subscribe 注解,同时这里可以添加threadMode参数决定onMessageEventBus方法执行在什么线程上面,这里的参数分为:

    • POSTING –与消息发送者在同一线程(默认)

    • MAIN –执行在主线程

    • BACKGROUND –执行在一个后台线程,会优先寻找发送者的线程,如果发送者执行在主线程,那么就新建一个后台线程

    • ASYNC –执行在一个新的后台线程中

    5.发布者

    前面准备好,这里就可以任意post event。所有已注册EventBus的subscriber只要event_type相匹配,都可以收到该event。

    EventBus.getDefault().post(new MessageEvent("Hello everyone!"));
    

    使用篇就到这里,之后会继续写原理分析。

  • 相关阅读:
    dede织梦调取一二三级栏目名及栏目下的内容列表的方法
    Maven 加载ojdbc14.jar报错,解决方法
    vue.set动态新增对象属性,触发dom渲染
    object_funs.py
    module+standard library.py
    function.py
    exception.py
    assign.py
    if_test.py
    hello.py
  • 原文地址:https://www.cnblogs.com/lijianming180/p/12370468.html
Copyright © 2020-2023  润新知