#include "ai_media.h"
#include "ConfigModelC.h"
#include "ConfigModel.h"
+#include "cmsis_os2.h"
#ifdef __cplusplus
extern "C" {
#endif
m_statusTimer = nullptr;
}
}
+ // 网络状态更新后台任务结构体
+ struct NetworkStatusUpdateTask {
+ ThunderBirdModel* model;
+ };
+
+ // 网络状态更新后台线程函数
+ static void NetworkStatusUpdateThreadFunc(void* arg)
+ {
+ NetworkStatusUpdateTask* task = static_cast<NetworkStatusUpdateTask*>(arg);
+ if (task == nullptr || task->model == nullptr) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "NetworkStatusUpdateThreadFunc: Invalid task");
+ if (task) delete task;
+ return;
+ }
+
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "NetworkStatusUpdateThreadFunc: Starting background network status update");
+
+ // 在后台线程更新网络状态(耗时操作)
+ task->model->UpdateNetworkStatus();
+
+ // 更新完成后,通过PostGraphicEvent回到UI线程继续处理
+ GraphicService::GetInstance()->PostGraphicEvent([task]() {
+ if (task->model != nullptr) {
+ // 继续执行StatusCallback中需要在UI线程执行的部分
+ task->model->StatusCallbackUI();
+ }
+ delete task;
+ });
+ }
+
/**
- * @brief 状态管理回调处理
+ * @brief 状态管理回调处理(UI线程部分)
*/
- void ThunderBirdModel::StatusCallback()
+ void ThunderBirdModel::StatusCallbackUI()
{
- // ==================== 网络状态处理 ====================
- // 更新网络状态信息(包括SIM卡、信号强度、网络连接等)
- // 先检查Cat1电源状态
- UpdateNetworkStatus();
// if( HasCat1Power() == false)
// {
// WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Cat1电源状态异常,跳过网络检查");
ThunderBirdPresenter::GetInstance()->timer_callback_toui_proc();
}
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "StatusCallback: status=%d", static_cast<int>(m_currentStatus));
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "StatusCallbackUI: status=%d", static_cast<int>(m_currentStatus));
+ }
+
+ /**
+ * @brief 状态管理回调处理(启动后台线程更新网络状态)
+ */
+ void ThunderBirdModel::StatusCallback()
+ {
+ // ==================== 网络状态处理 ====================
+ // 将网络状态更新移到后台线程,避免阻塞UI线程
+ NetworkStatusUpdateTask* task = new NetworkStatusUpdateTask();
+ task->model = this;
+
+ // 创建后台线程执行网络状态更新
+ osThreadAttr_t attr = {};
+ attr.name = "NetStatusUpdate";
+ attr.stack_size = 0x2000; // 8KB栈
+ attr.priority = osPriorityNormal;
+
+ osThreadId_t threadId = osThreadNew((osThreadFunc_t)NetworkStatusUpdateThreadFunc, task, &attr);
+ if (threadId == nullptr) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::StatusCallback: Failed to create background thread, falling back to sync");
+ // 如果线程创建失败,回退到同步方式(不推荐,但至少能工作)
+ UpdateNetworkStatus();
+ StatusCallbackUI();
+ delete task;
+ }
+ // 如果线程创建成功,StatusCallbackUI会在后台线程完成后通过PostGraphicEvent调用
}