Android架構 32.第三方開源庫 RxJava - Android實際開發場景

不要擾亂他人的心志,不要動搖自己的決心

 

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'

 
  1. RxPermissions rxPermissions = new RxPermissions(this);
  2.  
  3. rxPermissions.request(Manifest.permission.CAMERA).subscribe(new Consumer<Boolean>() {
  4. @Override
  5. public void accept(Boolean aBoolean) throws Exception {
  6. if(aBoolean){
  7. // 成功
  8. }else {
  9. // 失敗
  10. }
  11. }
  12. });

 

RxPermissions構建的時候創建了一個 RxPermissionsFragment 對象,然後加到了我們 Activity 中

 

流程 Actvity 添加了一個輕量級的 Fragment ,然後調用 Fragment 的方法去請求權限,我們的回調實在 Fragment 中的 onRequestPermissionsResult

-> 然後處理結果進行返回,但是並有對Fragment進行移除和銷燬,所以一般情況下一個Activity儘量只 new 一個 RxPermission 對象

 

4. RxAndroid / RxBinding

 

 

5. RxKotlin

 

 

6. other (第三方支付,第三方登錄.....) RxLogin



     

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章