瀏覽代碼

串行改并行,提高效率

詹子聪 5 年之前
父節點
當前提交
40ada891b1

+ 49 - 45
app/src/main/java/com/miekir/eden/ui/mine/login/LoginActivity.java

@@ -1,5 +1,6 @@
 package com.miekir.eden.ui.mine.login;
 
+import android.annotation.SuppressLint;
 import android.content.Intent;
 import android.os.Bundle;
 import android.provider.Settings;
@@ -36,10 +37,11 @@ import com.miekir.eden.ui.welcome.WelcomePresenter;
 import com.miekir.mvp.presenter.InjectPresenter;
 
 import java.util.List;
+import java.util.concurrent.TimeUnit;
 
-import io.reactivex.Observer;
-import io.reactivex.android.schedulers.AndroidSchedulers;
-import io.reactivex.disposables.Disposable;
+import io.reactivex.Observable;
+import io.reactivex.functions.BiFunction;
+import io.reactivex.functions.Consumer;
 import io.reactivex.schedulers.Schedulers;
 
 /**
@@ -115,54 +117,56 @@ public class LoginActivity extends BaseBeiActivity implements View.OnClickListen
         return super.onOptionsItemSelected(item);
     }
 
+    /**
+     * 并行获取,效率高
+     */
+    @SuppressLint("CheckResult")
     private void getKawayiSetting() {
-        RetrofitHelper.getInstance().getRequestApi(KwyAPI.class, KwyAPI.KWY_BASE)
+        Observable<BaseKwyBean> photoObservable = RetrofitHelper.getInstance()
+                .getRequestApi(KwyAPI.class, KwyAPI.KWY_BASE)
                 .getKwyPhotoList()
-                .doOnNext(photoResult -> {
-                    if (photoResult != null) {
-                        String detailJson = null;
-                        try {
-                            detailJson = AESTool.decryptKawayi(photoResult.getJson(), WalkApp.KEY_SECRET);
-                            List<EncryptKwyPhotoBean> photoList = JSON.parseObject(detailJson, new TypeReference<List<EncryptKwyPhotoBean>>() {});
-                            if (photoList != null && photoList.size() > 0) {
-                                EdenManager.getInstance().setKwyPhotoReady(true);
-                            }
-                        } catch (Exception e) {
-                            e.printStackTrace();
-                        }
-                    }
-                })
-                .flatMap(response -> {
-                    // 这里是子线程
-                    // 根据站点编号查询站点人员信息
-                    return RetrofitHelper.getInstance().getRequestApi(KwyAPI.class, KwyAPI.KWY_BASE).getKwyVideo();
-                })
-                .subscribeOn(Schedulers.io())
-                .observeOn(AndroidSchedulers.mainThread())
-                .subscribe(new Observer<BaseKwyBean>() {
-
-                    @Override
-                    public void onSubscribe(Disposable d) {
-
-                    }
-
-                    @Override
-                    public void onNext(BaseKwyBean videoBean) {
-                        if (videoBean != null) {
-                            EdenManager.getInstance().setVideoUrl(videoBean.getJson());
+                .timeout(6, TimeUnit.SECONDS)
+                .subscribeOn(Schedulers.io());
+
+        Observable<BaseKwyBean> videoObservable = RetrofitHelper.getInstance()
+                .getRequestApi(KwyAPI.class, KwyAPI.KWY_BASE)
+                .getKwyVideo()
+                .timeout(6, TimeUnit.SECONDS)
+                .subscribeOn(Schedulers.io());
+
+        Observable.zip(photoObservable, videoObservable, new BiFunction<BaseKwyBean, BaseKwyBean, String>() {
+            @Override
+            public String apply(BaseKwyBean photoBean, BaseKwyBean videoBean) throws Exception {
+                if (photoBean != null) {
+                    String detailJson = null;
+                    try {
+                        detailJson = AESTool.decryptKawayi(photoBean.getJson(), WalkApp.KEY_SECRET);
+                        List<EncryptKwyPhotoBean> photoList = JSON.parseObject(detailJson, new TypeReference<List<EncryptKwyPhotoBean>>() {});
+                        if (photoList != null && photoList.size() > 0) {
+                            EdenManager.getInstance().setKwyPhotoReady(true);
                         }
+                    } catch (Exception e) {
+                        e.printStackTrace();
                     }
+                }
 
-                    @Override
-                    public void onError(Throwable e) {
-                        welcomePresenter.submitLogin();
-                    }
+                if (videoBean != null) {
+                    EdenManager.getInstance().setVideoUrl(videoBean.getJson());
+                }
+                // 如果返回null会走onError
+                return "";
+            }
+        })
+        .subscribe(new Consumer<String>() {
 
-                    @Override
-                    public void onComplete() {
-                        welcomePresenter.submitLogin();
-                    }
-                });
+            @Override
+            public void accept(String userInfo) throws Exception {
+                welcomePresenter.submitLogin();
+            }
+        }, onError -> {
+            // 必须要重写处理error的逻辑
+            welcomePresenter.submitLogin();
+        });
     }
 
     private int mAdminTimes = 0;

+ 94 - 36
app/src/main/java/com/miekir/eden/ui/welcome/WelcomeActivity.java

@@ -1,5 +1,6 @@
 package com.miekir.eden.ui.welcome;
 
+import android.annotation.SuppressLint;
 import android.content.Intent;
 import android.os.Bundle;
 
@@ -29,13 +30,67 @@ import com.miekir.eden.ui.mine.login.LoginActivity;
 import com.miekir.mvp.presenter.InjectPresenter;
 
 import java.util.List;
+import java.util.concurrent.TimeUnit;
 
-import io.reactivex.Observer;
+import io.reactivex.Observable;
 import io.reactivex.android.schedulers.AndroidSchedulers;
-import io.reactivex.disposables.Disposable;
+import io.reactivex.functions.BiFunction;
+import io.reactivex.functions.Consumer;
 import io.reactivex.schedulers.Schedulers;
 
 
+/**
+ * 串行获取,效率低
+ */
+/*private void getKawayiSetting() {
+    RetrofitHelper.getInstance().getRequestApi(KwyAPI.class, KwyAPI.KWY_BASE)
+            .getKwyPhotoList()
+            .doOnNext(photoResult -> {
+                if (photoResult != null) {
+                    String detailJson = null;
+                    try {
+                        detailJson = AESTool.decryptKawayi(photoResult.getJson(), WalkApp.KEY_SECRET);
+                        List<EncryptKwyPhotoBean> photoList = JSON.parseObject(detailJson, new TypeReference<List<EncryptKwyPhotoBean>>() {});
+                        if (photoList != null && photoList.size() > 0) {
+                            EdenManager.getInstance().setKwyPhotoReady(true);
+                        }
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                    }
+                }
+            })
+            .flatMap(response -> {
+                // 这里是子线程
+                // 根据站点编号查询站点人员信息
+                return RetrofitHelper.getInstance().getRequestApi(KwyAPI.class, KwyAPI.KWY_BASE).getKwyVideo();
+            })
+            .subscribeOn(Schedulers.io())
+            .observeOn(AndroidSchedulers.mainThread())
+            .subscribe(new Observer<BaseKwyBean>() {
+
+                @Override
+                public void onSubscribe(Disposable d) {
+
+                }
+
+                @Override
+                public void onNext(BaseKwyBean videoBean) {
+                    if (videoBean != null) {
+                        EdenManager.getInstance().setVideoUrl(videoBean.getJson());
+                    }
+                }
+
+                @Override
+                public void onError(Throwable e) {
+                    goOnActivity();
+                }
+
+                @Override
+                public void onComplete() {
+                    goOnActivity();
+                }
+            });
+}*/
 /**
  * Copyright (C), 2019-2020, Miekir
  *
@@ -80,14 +135,30 @@ public class WelcomeActivity extends BaseBeiActivity implements ILoginView, ISys
         getKawayiSetting();
     }
 
+    /**
+     * 并行获取,效率高
+     */
+    @SuppressLint("CheckResult")
     private void getKawayiSetting() {
-        RetrofitHelper.getInstance().getRequestApi(KwyAPI.class, KwyAPI.KWY_BASE)
+        Observable<BaseKwyBean> photoObservable = RetrofitHelper.getInstance()
+                .getRequestApi(KwyAPI.class, KwyAPI.KWY_BASE)
                 .getKwyPhotoList()
-                .doOnNext(photoResult -> {
-                    if (photoResult != null) {
+                .timeout(6, TimeUnit.SECONDS)
+                .subscribeOn(Schedulers.io());
+
+        Observable<BaseKwyBean> videoObservable = RetrofitHelper.getInstance()
+                .getRequestApi(KwyAPI.class, KwyAPI.KWY_BASE)
+                .getKwyVideo()
+                .timeout(6, TimeUnit.SECONDS)
+                .subscribeOn(Schedulers.io());
+
+        Observable.zip(photoObservable, videoObservable, new BiFunction<BaseKwyBean, BaseKwyBean, String>() {
+                @Override
+                public String apply(BaseKwyBean photoBean, BaseKwyBean videoBean) throws Exception {
+                    if (photoBean != null) {
                         String detailJson = null;
                         try {
-                            detailJson = AESTool.decryptKawayi(photoResult.getJson(), WalkApp.KEY_SECRET);
+                            detailJson = AESTool.decryptKawayi(photoBean.getJson(), WalkApp.KEY_SECRET);
                             List<EncryptKwyPhotoBean> photoList = JSON.parseObject(detailJson, new TypeReference<List<EncryptKwyPhotoBean>>() {});
                             if (photoList != null && photoList.size() > 0) {
                                 EdenManager.getInstance().setKwyPhotoReady(true);
@@ -96,38 +167,25 @@ public class WelcomeActivity extends BaseBeiActivity implements ILoginView, ISys
                             e.printStackTrace();
                         }
                     }
-                })
-                .flatMap(response -> {
-                    // 这里是子线程
-                    // 根据站点编号查询站点人员信息
-                    return RetrofitHelper.getInstance().getRequestApi(KwyAPI.class, KwyAPI.KWY_BASE).getKwyVideo();
-                })
-                .subscribeOn(Schedulers.io())
-                .observeOn(AndroidSchedulers.mainThread())
-                .subscribe(new Observer<BaseKwyBean>() {
-
-                    @Override
-                    public void onSubscribe(Disposable d) {
-
-                    }
-
-                    @Override
-                    public void onNext(BaseKwyBean videoBean) {
-                        if (videoBean != null) {
-                            EdenManager.getInstance().setVideoUrl(videoBean.getJson());
-                        }
-                    }
-
-                    @Override
-                    public void onError(Throwable e) {
-                        goOnActivity();
-                    }
 
-                    @Override
-                    public void onComplete() {
-                        goOnActivity();
+                    if (videoBean != null) {
+                        EdenManager.getInstance().setVideoUrl(videoBean.getJson());
                     }
-                });
+                    // 如果返回null会走onError
+                    return "";
+                }
+            })
+        .observeOn(AndroidSchedulers.mainThread())
+        .subscribe(new Consumer<String>() {
+
+            @Override
+            public void accept(String userInfo) throws Exception {
+                goOnActivity();
+            }
+        }, onError -> {
+            // 必须要重写处理error的逻辑
+            goOnActivity();
+        });
     }
 
     private void goOnActivity() {