zoukankan      html  css  js  c++  java
  • EventBus总结

    EventBus

    • Less code, better quality.
      与otto对比

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

    优缺点

    • 完全解耦了请求链之间的关系,避免了请求者被长持有,
    • 又比广播更轻量,比LocalBroadcast则更强大,
    • 接口简单实用,集成方便
    • 简化代码
    • 各种Event的定义工作量大。
    • 限定了方法名(3.0已经可以自定义)

    用法参考这里这里

    • 在Gradle脚本中添加 EventBus 依赖 compile 'org.greenrobot:event:3.0.0'
    • 定义events
    public class MessageEvent {
        public final String message;
    
        public MessageEvent(String message) {
            this.message = message;
        }
    }
    
    • 准备订阅者 订阅者需要实现event接收方法,当event被post时被调用。该方法由注解关键字 @Subscrib 来定义。自从EventBus3.0开始,该方法名称可以自由规定(去掉了2.0版本的定义约束)
    // This method will be called when a MessageEvent is posted (in the UI thread for Toast)
    @Subscribe(threadMode = ThreadMode.MAIN)
    public void onMessageEvent(MessageEvent event) {
        Toast.makeText(getActivity(), event.message, Toast.LENGTH_SHORT).show();
    }
    
    // This method will be called when a SomeOtherEvent is posted
    @Subscribe
    public void handleSomethingElse(SomeOtherEvent event) {
        doSomethingWith(event);
    }
    
    • 订阅者们(Subscribers)需要注册以及接触注册它们自己到总线Bus。只有订阅者被注册之后,它们才回收到事件(Events)通知。在Android中,Activities和Fragments通常根据它们的生命周期来绑定。
    @Override
    public void onStart() {
        super.onStart();
        EventBus.getDefault().register(this);
    }
    @Override
    public void onStop() {
       EventBus.getDefault().unregister(this);
        super.onStop();
    }
    
    • 发送事件 从你的代码中任何位置发送事件,所有当前注册过的订阅者,只要事件类型匹配都能收到。
    EventBus.getDefault().post(new MessageEvent("Hello everyone!"));
    

    源码分析参考这里

    参考文章列表

    EventBus 3.0的用法详解(一)

  • 相关阅读:
    java核心技术卷上学习笔记
    个人作业——软件工程实践总结作业
    个人作业——软件产品案例分析
    软件工程作业-结对编程 2.0
    软件工程作业-结对编程 1.0
    软件工程作业2.0
    软件工程作业1.0
    《面向对象程序设计》c++第六次作业___calculator SE
    面向对象程序设计作业 6.1~6.4
    面向对象程序设计作业 5.1~5.5
  • 原文地址:https://www.cnblogs.com/liveandlearn/p/5681221.html
Copyright © 2011-2022 走看看