日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

android预加载app,Android欢迎页预加载首页数据

發布時間:2025/3/12 Android 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android预加载app,Android欢迎页预加载首页数据 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

項目需求:展示歡迎頁的同時執行token登錄和首頁預加載

背景:

在此之前,展示歡迎頁和token登錄等網絡操作是串行的,所以用戶點開App到最終看到首頁的時間就是:"展示歡迎頁的時間"+"登錄時間"+"請求首頁數據時間"。單線程處理這些事情的優點是邏輯清晰,控制簡單。缺點也非常突出:用戶的體驗并不好,特別是網絡狀況不佳的時候,等待時間大幅增加。

這個版本我們加入了跳過功能,對于等待時間的要求更高了,我不得不“磨刀霍霍”著手解決這個問題。

場景:

歡迎頁可能執行的網絡操作:檢查版本更新、token登錄、預加載首頁數據(兩個接口);

如果本地保存有用戶的登錄信息,執行token登錄;

如果本地未保存用戶的登錄信息,跳轉到登錄頁;

如果出現網絡連接錯誤(斷網、超時等),直接提示用戶"網絡錯誤",退出軟件;

如果需要強制更新,跳轉到登錄頁進行更新;

token登錄失敗,跳轉到登錄頁;

全部接口請求完成(僅指token登錄成功),攜帶數據啟動首頁。

思路:

展示歡迎頁的同時啟動所有網絡請求;

使用AtomicInteger計數,使用AtomicBoolean標記關鍵事件(是否達到展示時間、是否發生網絡錯誤、是否需要跳轉到登錄頁);

每個網絡操作完成時要及時更新計數器,如果發生“關心”事件要進行登記;

每個網絡操作完成時都要進行終點測試(判斷自己是否是最后完成者,是的話就要執行跳轉)。

關鍵代碼:

網絡請求樣例:

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);//登記狀態

}

isCheckVersionSuccess = true;// 記錄檢查版本的結果

mStepsAtomicInteger.getAndIncrement();// 計數

finalTest();//終點測試

} catch (Exception e) {

e.printStackTrace();

mNeedLogin.set(true);

mStepsAtomicInteger.getAndIncrement();

finalTest();

}

}

@Override

public void onFailure(String code, String message) {

mIsNetworkError.set(true);// 登記網絡錯誤

mStepsAtomicInteger.getAndIncrement();

finalTest();

}

};

終點測試方法:

//終點測試,判斷預加載是否都完成

private synchronized void finalTest() {

if (!mAllowFinalTestAtomicBoolean.get()) {//時間是否滿足

return;

}

if(mIsNetworkError.get()){//如果網絡錯誤

try {

final Dialog dialog = confirm("網絡信號不好喲~寶寶卡得要哭了~");

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) {//所有網絡請求都已返回

if (isCheckVersionSuccess && isLoginByTokenSuccess) {

enterMainActivity();

} else {

LoginActivity.enterLogin(PictureActivity.this);

}

}

}

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的android预加载app,Android欢迎页预加载首页数据的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。