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) {
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语句即可