• [Android] Android RxBus 用法学习总结


    事件总线的好处在于方便组件之间的交互,RxBus不是一个库,而是使用RxJava实现事件总线的一种思想。

    rxbus和eventbus相比较

    RxJava 主要做异步、网络的数据处理,强大之处就是对数据的处理了,而对于处理完后的数据处理是一样的都是观察者模式来通知,也可以把 RxJava 进一步封装出一个 EventBus(RxBus) 库,二者可以转换的。

    EventBus比较适合仅仅当做组件间的通讯工具使用,主要用来传递消息。使用EventBus可以避免搞出一大推的interface,仅仅是为了实现组件间的通讯,而不得不去实现那一推的接口。

    如何使用:

    一、添加依赖appuild.gradle

    compile 'com.hwangjr.rxbus:rxbus:2.0.0'

    二、Activity调用

    1)使用方式有两种,直接使用com.hwangjr.rxbus.RxBus或者使用单例模式得到一个对象

    public static final class RxBus{
           private static Bus mBus;
           public static synchronized Bus getInstance(){
              if(mBus == null){
    
                  mBus = new Bus();
    
              }
              return mBus;
          }   
     }


     2)register和unregister
    要在onCreate 和 onDestory 中相继:

    RxBus.get().register(this);
    RxBus.get().unregister(this);
    如果是在Fragment中类似处理即可!

    3)发送和接收

    本次只演示注解方式实现的发送和接收

    详见代码:

    package com.jack.testmd;
    
    import android.os.Bundle;
    import android.support.v7.app.AppCompatActivity;
    import android.widget.Toast;
    
    import com.hwangjr.rxbus.RxBus;
    import com.hwangjr.rxbus.annotation.Subscribe;
    import com.hwangjr.rxbus.annotation.Tag;
    
    public class TestRxbusActivity extends AppCompatActivity {
        private final String TAG1 = "eat";
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_test_rxbus);
    
            RxBus.get().register(this);
    
            initData();
        }
    
        private void initData() {
            RxBus.get().post(this);  //方式1)无tag 无参数监听
            RxBus.get().post(TAG1, this); //方式2)tag 无参数监听
            RxBus.get().post("say", "aaa");  //方式3)有tag,有参数
        }
    
        @Subscribe
        public void some(Object obj) {
            Toast.makeText(getApplicationContext(), "some some~", Toast.LENGTH_LONG).show();
        }
    
        @Subscribe(tags = {@Tag(TAG1)})
        public void eat(Object obj) {
            Toast.makeText(getApplicationContext(), "eat~", Toast.LENGTH_LONG).show();
        }
    
        //失败 ,Produce 发送测试 无效
    //    @Produce(tags = {@Tag("say")})
    //    public String send1(){
    //        return "say";
    //    }
    
        @Subscribe(tags = {@Tag("say")})
        public void say(Object obj) {//此处obj为发送过来的参数 aaa
            Toast.makeText(getApplicationContext(), "rec:"+ obj.toString(), Toast.LENGTH_LONG).show();
        }
    
    
        @Override
        protected void onDestroy() {
            RxBus.get().unregister(this);
    
            super.onDestroy();
        }
    }

    本博客地址: wukong1688

    本文原文地址:https://www.cnblogs.com/wukong1688/p/10708413.html

    转载请著名出处!谢谢~~

  • 相关阅读:
    推送
    XPath
    XML
    在xcode 6.4 环境下写的demo 在xode7 环境下 网络请求有问题
    SVN 搭建
    翻译
    iOS面试题积累
    安卓扁平化之路专题(三)Android 5.0新特性
    Android @SuppressLint @TargetApi 总结
    Android_support_v4,Android_support_v7,Android_support_v13区别
  • 原文地址:https://www.cnblogs.com/wukong1688/p/10708413.html
Copyright © 2020-2023  润新知