修复死机bug 3426/1 3426/head 3427/target/1
authorxue <2144439972@qq.com>
Wed, 27 May 2026 09:42:48 +0000 (17:42 +0800)
committerxue <2144439972@qq.com>
Wed, 27 May 2026 09:42:48 +0000 (17:42 +0800)
code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/include/ThunderBirdModel.h
code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdMainView.cpp
code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdModel.cpp
code/sdk/zhihui/leiniao/imsl_ln/ln_api.h

index 6599c6c..68c0948 100644 (file)
@@ -519,6 +519,8 @@ namespace OHOS
         bool m_bootCat1OtaFromVer47 = false;
         bool m_bootCat1OtaAwaitNetwork = false;
         bool m_bootCat1OtaUrlsPending = false;
+        /** 本开机周期已做过 1.0.47 Cat1 检查,避免 OTA 失败返回主页后反复进 OTA */
+        bool m_bootCat1OtaCheckDone = false;
 
     };
 }
index 8fca11b..e35075a 100644 (file)
@@ -571,10 +571,12 @@ namespace OHOS
 
             // 默认显示主界面
             //ChangeView(MAXVIEW, THUNDERBIRD_GUIDEVIEW, 0); // 文字显示图层
-            if(ThunderBirdModel::GetInstance()->GetCurrentView() != -1 && ThunderBirdModel::GetInstance()->GetCurrentSubView() != -1)
             {
-                ChangeView(MAXVIEW, ThunderBirdModel::GetInstance()->GetCurrentView(), ThunderBirdModel::GetInstance()->GetCurrentSubView());
-                //清空状态
+                int16_t savedView = ThunderBirdModel::GetInstance()->GetCurrentView();
+                int16_t savedSubView = ThunderBirdModel::GetInstance()->GetCurrentSubView();
+                if (savedView >= 0 && savedView < MAXVIEW && savedSubView != -1) {
+                    ChangeView(MAXVIEW, savedView, savedSubView);
+                }
                 ThunderBirdModel::GetInstance()->SetCurrentView(-1);
                 ThunderBirdModel::GetInstance()->SetCurrentSubView(-1);
             }
@@ -1184,6 +1186,12 @@ namespace OHOS
     void ThunderBirdMainView::ChangeView(int16_t hideView, int16_t showView, int16_t subView)
     {
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdMainView::ChangeView hideView=%d, showView=%d, subView=%d", hideView, showView, subView);
+        if (showView < 0 || showView >= MAXVIEW) {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
+                "ThunderBirdMainView::ChangeView invalid showView=%d, fallback guide", showView);
+            showView = THUNDERBIRD_GUIDEVIEW;
+            subView = ThunderBirdGuideView::THUNDERBIRD_GUIDEVIEW_1;
+        }
         if (hideView > MAXVIEW)
         {
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdMainView:: SystemViewId Overstep ones bounds");
index 322204d..ec2f352 100644 (file)
@@ -784,9 +784,23 @@ static bool IsSoftwareVersion_1_0_47(void)
     //传入状态赋值
     void ThunderBirdModel::SetViewModel()
     {
-        currentView_model = ThunderBirdMainView::GetInstance()->GetCurrentView();
-        currentSubView_model = ThunderBirdMainView::GetInstance()->GetCurrentSubView();
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SetViewModel: currentView_model=%d, currentSubView_model=%d", currentView_model, currentSubView_model);
+        ThunderBirdMainView *mainView = ThunderBirdMainView::GetInstance();
+        if (mainView == nullptr) {
+            WEARABLE_LOGW(WEARABLE_LOG_MODULE_APP, "SetViewModel: ThunderBirdMainView null, skip");
+            return;
+        }
+        int16_t view = mainView->GetCurrentView();
+        int16_t subView = mainView->GetCurrentSubView();
+        if (view < 0 || view >= MAXVIEW) {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SetViewModel: invalid view=%d, reset saved state", view);
+            currentView_model = -1;
+            currentSubView_model = -1;
+            return;
+        }
+        currentView_model = view;
+        currentSubView_model = subView;
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SetViewModel: currentView_model=%d, currentSubView_model=%d",
+            currentView_model, currentSubView_model);
     }
      
 
@@ -800,6 +814,12 @@ static bool IsSoftwareVersion_1_0_47(void)
      void ThunderBirdModel::TryEnterBootCat1OtaSliceIfNeeded()
      {
 #ifdef SUPPORT_CAT1_SERVICE
+         if (m_bootCat1OtaCheckDone) {
+             WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,
+                 "TryEnterBootCat1OtaSliceIfNeeded: already checked this boot, skip");
+             return;
+         }
+         m_bootCat1OtaCheckDone = true;
          if (!IsSoftwareVersion_1_0_47()) {
              return;
          }
@@ -830,6 +850,9 @@ static bool IsSoftwareVersion_1_0_47(void)
         // 更新状态检查
         if(status == 1 || status == 2 || status == 5 || status == OTA_UI_STATUS_CAT1_PY34_FAIL)//OTA升级,3为py升级
         {
+            if (status == OTA_UI_STATUS_CAT1_PY34_FAIL) {
+                m_bootCat1OtaCheckDone = true;
+            }
             OtaModel::GetInstance()->SetOtaStatus(status);
             SetViewModel();
             //do_ln_http_server_send_data(LN_HTTP_SERVICE_CMD_WS_ENTER_SLEEP, NULL, 0);
@@ -858,6 +881,8 @@ static bool IsSoftwareVersion_1_0_47(void)
         m_bootCat1OtaFromVer47 = false;
         m_bootCat1OtaAwaitNetwork = false;
         m_bootCat1OtaUrlsPending = false;
+        currentView_model = -1;
+        currentSubView_model = -1;
      }
 
      void ThunderBirdModel::PrepareCat1NextRoundAfterSuccess()
index 6736e58..c81523d 100644 (file)
@@ -28,7 +28,7 @@ typedef struct
 
 /* ============================== 公共宏与URL路径 ============================== */
 #define LN_VOICE_CHAT_ENABLED 0  //声纹锁开启宏
-#define LN_ENV_PRODUCTION 0  //正式环境
+#define LN_ENV_PRODUCTION 1  //正式环境
 /* 接口基础配置 - 如需切换环境/密钥,在此调整 */
 #if LN_ENV_PRODUCTION
 #define LN_BASE_URL "https://ambybox-o.api.leiniao.com/ambybox-device-api"   //正式环境服务器地址