Android歡迎頁預(yù)加載首頁數(shù)據(jù)

項(xiàng)目需求:展示歡迎頁的同時(shí)執(zhí)行token登錄和首頁預(yù)加載

背景:

在此之前鉴象,展示歡迎頁和token登錄等網(wǎng)絡(luò)操作是串行的租漂,所以用戶點(diǎn)開App到最終看到首頁的時(shí)間就是:"展示歡迎頁的時(shí)間"+"登錄時(shí)間"+"請求首頁數(shù)據(jù)時(shí)間"蔗牡。單線程處理這些事情的優(yōu)點(diǎn)是邏輯清晰确镊,控制簡單臂容。缺點(diǎn)也非常突出:用戶的體驗(yàn)并不好科雳,特別是網(wǎng)絡(luò)狀況不佳的時(shí)候根蟹,等待時(shí)間大幅增加。

這個(gè)版本我們加入了跳過功能炸渡,對于等待時(shí)間的要求更高了娜亿,我不得不“磨刀霍霍”著手解決這個(gè)問題。

場景:

  1. 歡迎頁可能執(zhí)行的網(wǎng)絡(luò)操作:檢查版本更新蚌堵、token登錄买决、預(yù)加載首頁數(shù)據(jù)(兩個(gè)接口);
  2. 如果本地保存有用戶的登錄信息吼畏,執(zhí)行token登錄督赤;
  3. 如果本地未保存用戶的登錄信息,跳轉(zhuǎn)到登錄頁泻蚊;
  4. 如果出現(xiàn)網(wǎng)絡(luò)連接錯(cuò)誤(斷網(wǎng)躲舌、超時(shí)等),直接提示用戶"網(wǎng)絡(luò)錯(cuò)誤"性雄,退出軟件没卸;
  5. 如果需要強(qiáng)制更新,跳轉(zhuǎn)到登錄頁進(jìn)行更新秒旋;
  6. token登錄失敗约计,跳轉(zhuǎn)到登錄頁;
  7. 全部接口請求完成(僅指token登錄成功)迁筛,攜帶數(shù)據(jù)啟動(dòng)首頁煤蚌。

思路:

  1. 展示歡迎頁的同時(shí)啟動(dòng)所有網(wǎng)絡(luò)請求;
  2. 使用AtomicInteger計(jì)數(shù)细卧,使用AtomicBoolean標(biāo)記關(guān)鍵事件(是否達(dá)到展示時(shí)間尉桩、是否發(fā)生網(wǎng)絡(luò)錯(cuò)誤、是否需要跳轉(zhuǎn)到登錄頁)贪庙;
  3. 每個(gè)網(wǎng)絡(luò)操作完成時(shí)要及時(shí)更新計(jì)數(shù)器蜘犁,如果發(fā)生“關(guān)心”事件要進(jìn)行登記;
  4. 每個(gè)網(wǎng)絡(luò)操作完成時(shí)都要進(jìn)行終點(diǎn)測試(判斷自己是否是最后完成者止邮,是的話就要執(zhí)行跳轉(zhuǎn))这橙。

關(guān)鍵代碼:

網(wǎng)絡(luò)請求樣例:
VersionModelImpl.CheckVersionListener listener = new VersionModelImpl.CheckVersionListener() {
            @Override
            public void onSuccess(JSONObject data) {
                try {
                    final Version version = new Gson().fromJson(data.toString(), Version.class);
                    if (isMustUpdate(version)) {
                        mNeedLogin.set(true);//登記狀態(tài)
                    }
                    isCheckVersionSuccess = true;// 記錄檢查版本的結(jié)果
                    mStepsAtomicInteger.getAndIncrement();// 計(jì)數(shù)
                    finalTest();//終點(diǎn)測試
                } catch (Exception e) {
                    e.printStackTrace();
                    mNeedLogin.set(true);
                    mStepsAtomicInteger.getAndIncrement();
                    finalTest();
                }
            }

            @Override
            public void onFailure(String code, String message) {
                mIsNetworkError.set(true);// 登記網(wǎng)絡(luò)錯(cuò)誤
                mStepsAtomicInteger.getAndIncrement();
                finalTest();
            }
        };
終點(diǎn)測試方法:
//終點(diǎn)測試,判斷預(yù)加載是否都完成
    private synchronized void finalTest() {
        if (!mAllowFinalTestAtomicBoolean.get()) {//時(shí)間是否滿足
            return;
        }
        if(mIsNetworkError.get()){//如果網(wǎng)絡(luò)錯(cuò)誤
            try {
                final Dialog dialog = confirm("網(wǎng)絡(luò)信號(hào)不好喲~寶寶卡得要哭了~");
                dialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
                    @Override
                    public void onDismiss(DialogInterface dialog) {
                        onBackPressed();
                    }
                });
            } catch (Exception e) {
                e.printStackTrace();
            }
            return;
        }
        if (mNeedLogin.get()) {//如果需要登錄
            LoginActivity.enterLogin(PictureActivity.this);
            return;
        }
        if (mStepsAtomicInteger.intValue() >= 4) {//所有網(wǎng)絡(luò)請求都已返回
            if (isCheckVersionSuccess && isLoginByTokenSuccess) {
                enterMainActivity();
            } else {
                LoginActivity.enterLogin(PictureActivity.this);
            }
        }
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末农尖,一起剝皮案震驚了整個(gè)濱河市析恋,隨后出現(xiàn)的幾起案子良哲,更是在濱河造成了極大的恐慌盛卡,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件筑凫,死亡現(xiàn)場離奇詭異滑沧,居然都是意外死亡并村,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門滓技,熙熙樓的掌柜王于貴愁眉苦臉地迎上來哩牍,“玉大人,你說我怎么就攤上這事令漂∠ダィ” “怎么了?”我有些...
    開封第一講書人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵叠必,是天一觀的道長荚孵。 經(jīng)常有香客問我,道長纬朝,這世上最難降的妖魔是什么收叶? 我笑而不...
    開封第一講書人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮共苛,結(jié)果婚禮上判没,老公的妹妹穿的比我還像新娘。我一直安慰自己隅茎,他們只是感情好澄峰,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著患膛,像睡著了一般摊阀。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上踪蹬,一...
    開封第一講書人閱讀 49,144評(píng)論 1 285
  • 那天胞此,我揣著相機(jī)與錄音,去河邊找鬼跃捣。 笑死漱牵,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的疚漆。 我是一名探鬼主播酣胀,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼娶聘!你這毒婦竟也來了闻镶?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬榮一對情侶失蹤丸升,失蹤者是張志新(化名)和其女友劉穎铆农,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體狡耻,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡墩剖,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年猴凹,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片岭皂。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡郊霎,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出爷绘,到底是詐尸還是另有隱情书劝,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布土至,位于F島的核電站庄撮,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏毙籽。R本人自食惡果不足惜洞斯,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望坑赡。 院中可真熱鬧烙如,春花似錦、人聲如沸毅否。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽螟加。三九已至徘溢,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間捆探,已是汗流浹背然爆。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留黍图,地道東北人曾雕。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像助被,于是被迫代替她去往敵國和親剖张。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,522評(píng)論 25 707
  • 點(diǎn)擊查看原文 Web SDK 開發(fā)手冊 SDK 概述 網(wǎng)易云信 SDK 為 Web 應(yīng)用提供一個(gè)完善的 IM 系統(tǒng)...
    layjoy閱讀 13,675評(píng)論 0 15
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫揩环、插件搔弄、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,033評(píng)論 4 62
  • 銅雀臺(tái)里候東風(fēng), 到底當(dāng)年志未成丰滑。 無緣可會(huì)喬家女顾犹, 臺(tái)下風(fēng)波自有聲。
    Lotus吳閱讀 206評(píng)論 0 2
  • 從撞車事件中看到的光輝 2017-2-16星期四野狼魂(東莞)晴 早上送女兒去學(xué)會(huì)然后折往工廠的路上看到了一起不是...
    野狼周高祥閱讀 173評(píng)論 0 0