不要擾亂他人的心志,不要動搖自己的決心
1. OkHttp + RxJava + Rerofit (3次 + 1次)
2. RxBus + RxRelay
// addTextChangedListener
RxTextView.textChanges(mUserNameEt).subscribe(new Consumer<CharSequence>() {
@Override
public void accept(CharSequence text) throws Exception {
log("textChanges");
mClearContent.setVisibility(TextUtils.isEmpty(text) ? View.INVISIBLE : View.VISIBLE);
}
});
Observable<CharSequence> userNameObservable = RxTextView.textChanges(mUserNameEt);
Observable<CharSequence> userPwdObservable = RxTextView.textChanges(mUserPwdEt);
// 相當於合併
Observable.combineLatest(userNameObservable, userPwdObservable,
new BiFunction<CharSequence, CharSequence, Object>() {
@Override
public Object apply(CharSequence userName, CharSequence userPwd) throws Exception {
// 設置按鈕是否可用(或者改變背景顏色)
log("combineLatest");
mClearContent.setEnabled(!TextUtils.isEmpty(userName)&&!TextUtils.isEmpty(userPwd));
return null;
}
});
// 防止重複點擊 debounce(時間,時間的單位)
RxView.clicks(mClearContent).debounce(300, TimeUnit.MILLISECONDS).subscribe(new Consumer<Object>() {
@Override
public void accept(Object o) throws Exception {
}
});
// 控件操作時間間隔
RxTextView.textChanges(mUserNameEt).debounce(1200, TimeUnit.MILLISECONDS)
.subscribe(new Consumer<CharSequence>() {
@Override
public void accept(CharSequence charSequence) throws Exception {
log("debounce");
}
});
// 接口輪詢,輪詢操作
Observable.interval(2, 2, TimeUnit.SECONDS)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<Long>() {
@Override
public void accept(Long aLong) throws Exception {
log("interval");
}
});
// 延時操作
Observable.timer(2, TimeUnit.SECONDS)
.subscribe(new Consumer<Long>() {
@Override
public void accept(Long aLong) throws Exception {
log("timer");
}
});
3. RxPermission
compile 'com.tbruyelle.rxpermissions2:rxpermissions:0.9.4@aar'
RxPermissions rxPermissions = new RxPermissions(this);
rxPermissions.request(Manifest.permission.CAMERA).subscribe(new Consumer<Boolean>() {
@Override
public void accept(Boolean aBoolean) throws Exception {
if(aBoolean){
// 成功
}else {
// 失敗
}
}
});
RxPermissions構建的時候創建了一個 RxPermissionsFragment 對象,然後加到了我們 Activity 中
流程 Actvity 添加了一個輕量級的 Fragment ,然後調用 Fragment 的方法去請求權限,我們的回調實在 Fragment 中的 onRequestPermissionsResult
-> 然後處理結果進行返回,但是並有對Fragment進行移除和銷燬,所以一般情況下一個Activity儘量只 new 一個 RxPermission 對象
4. RxAndroid / RxBinding
5. RxKotlin
6. other (第三方支付,第三方登錄.....) RxLogin