在Android上打造属于自己的Rxjava框架(四)扩展成EventBus

来源:互联网 发布:js中空格怎么表示 编辑:程序博客网 时间:2024/05/18 03:03
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">这一篇实现起来其实非常非常简单,仔细想一下RxJava和EventBus的区别,无非就是EventBus的全局可达性,就是一个全局静态变量的问题。</span>

下面就来简单实现一下。

1.首先给IPubliser增加几个方法

public IPublisher<T> name(String t);public IPublisher<T> save();public void destroy();
再在Publisher中添加全局变量

private static HashMap<String,IPublisher> publishSaved = new HashMap<String,IPublisher>();
还需要一个静态方法

2.看了以上几步相比大多数人都能猜到答案了,无非就是想办法在其他类中得到Publiser对象,这样就可以在不同的模块中订阅其他模块的事件。仅此而已,既然这样,每个Publisher就需要一个名字,每个Piublisher可以选择保存在全局变量中,最后有static自然就要有remove,否则就是内存泄漏了。

public IPublisher<T> name(String t) {        name = t;        return this;    }

public synchronized IPublisher<T> save() {        if (name  == null)            throw new RuntimeException("Publisher未命名");        if (publishSaved.containsKey(name))            throw new RuntimeException("Publisher重名");        publishSaved.put(name,this);        return this;    }

 public void destroy() {        publishSaved.remove(name);    }
public static <T> IPublisher<T> getPublisher(String name){        return (IPublisher<T>)publishSaved.get(name);    }


至此,就全部结束了。希望对大家有用



1 0
原创粉丝点击