zoukankan      html  css  js  c++  java
  • LiveEventBus

    先简单看看 LiveEventBus 是怎么使用 LiveData 的。

    public final class LiveEventBus {

    public synchronized <T> Observable<T> with(String key, Class<T> type) {
    if (!bus.containsKey(key)) {
    bus.put(key, new LiveEvent<>(key));
    }
    return (Observable<T>) bus.get(key);
    }

    private class LiveEvent<T> implements Observable<T> {

    private final LifecycleLiveData<T> liveData;

    LiveEvent(@NonNull String key) {
    this.key = key;
    this.liveData = new LifecycleLiveData<>();
    }

    @Override
    public void observe(@NonNull final LifecycleOwner owner, @NonNull final Observer<T> observer) {
    if (ThreadUtils.isMainThread()) {
    observeInternal(owner, observer);
    } else {
    mainHandler.post(new Runnable() {
    @Override
    public void run() {
    observeInternal(owner, observer);
    }
    });
    }
    }

    @MainThread
    private void observeInternal(@NonNull LifecycleOwner owner, @NonNull Observer<T> observer) {
    ObserverWrapper<T> observerWrapper = new ObserverWrapper<>(observer);
    observerWrapper.preventNextEvent = liveData.getVersion(http://www.amjmh.com/v/BIBRGZ_558768/) > ExternalLiveData.START_VERSION;
    liveData.observe(owner, observerWrapper);
    }

    @Override
    public void post(T value) {
    if (ThreadUtils.isMainThread()) {
    postInternal(value);
    } else {
    mainHandler.post(new PostValueTask(value));
    }
    }

    @MainThread
    private void postInternal(T value) {
    liveData.setValue(value);
    }

  • 相关阅读:
    [one day one question] safari缓存太厉害
    对工厂方法模式的一些思考(2)
    对工厂方法模式的一些思考(java语法表示)
    [选译]MySQL5.7以上Zip版官方安装文档
    clojure 使用阿里云仓库
    对jbox2d引擎的一些回顾与思考(swing实现demo)
    定位
    空白空间及溢出的处理
    BFC
    高度自适应
  • 原文地址:https://www.cnblogs.com/hyhy904/p/11384644.html
Copyright © 2011-2022 走看看