2016-9-14

2016-9-14

1.rxjava实现消息通知

public class RxBus {
    private final Subject<Object, Object> mBus;
    private final ConcurrentHashMap<Class<?>, Object> mStickyEventMap;

    private RxBus() {
        /**
         * PublishSubject只会把在订阅发生的时间点之后来自原始Observable的数据发射给观察者
         */
        mBus = new SerializedSubject<>(PublishSubject.create());
        mStickyEventMap = new ConcurrentHashMap<>();
    }

    public static RxBus getInstance() {
        return SingletonLoader.INSTANCE;
    }

    public void post(Object event) {
        if (hasObservers()) {
            mBus.onNext(event);
        }
    }

    public void postSticky(Object event) {
        mStickyEventMap.put(event.getClass(), event);
        post(event);
    }

    private boolean hasObservers() {
        return mBus != null && mBus.hasObservers();
    }

    public <T> Observable<T> toObservable(Class<T> eventType) {
        //ofType操作符只发射指定类型的数据,其内部就是filter+cast
        return mBus.asObservable().ofType(eventType).onBackpressureBuffer();
    }

    public <T> Observable<T> toObservableSticky(Class<T> eventType) {
        Object event = mStickyEventMap.get(eventType);
        synchronized (mStickyEventMap) {
            Observable<T> observable = toObservable(eventType);
            if (event != null) {
                return observable.mergeWith(Observable.just(eventType.cast(event)));
            }
            return observable;
        }
    }

    private static class SingletonLoader {
        private static final RxBus INSTANCE = new RxBus();
    }
}

2. 一些东东

LocalBroadcastManager

用于在APP内部使用的,效率和安全性更好的广播工具类。

Messenger

进程间通信的一个工具类。内部也是由AIDL实现的。

Fragment.setUserVisibleHint

Fragment可以重写此方法,然后根据参数的布尔值(true的话表示当前Fragment对用户可见)。

android:animateLayoutChanges

这是一个非常酷炫的属性。在父布局加上android:animateLayoutChanges="true"后,如果触发了layout方法(比如它的子View设置为GONE),系统就会自动帮你加上布局改变时的动画特效!!

android:clipToPadding

设置父view是否允许其子view在它的padding(这里指的是父View的padding)中绘制。如有个ListView,我们想要在初始位置时,第一项Item离顶部有10dp的距离,就可以在ListView的布局中加入android:clipToPadding="false"android:paddingTop="10dp"即可

3.baseComp

public abstract class BaseComp extends FrameLayout {

    public BaseComp(Context context) {
        super(context);
    }

    public BaseComp(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
    }

    public BaseComp(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    protected void onFinishInflate() {
        super.onFinishInflate();
        LayoutInflater.from(getContext()).inflate(getLayoutId(), this, true);
        loadData();
    }

    public abstract void loadData();

    public abstract int getLayoutId();
}

4.创建索引语句

CREATE UNIQUE INDEX index_name ON table_name (column_name1,column_name1);
执行上面的sql语句即可

猜你喜欢

转载自blog.csdn.net/a90123/article/details/52541244