消息:优化消息的显示间隔 1142/1
authorCaisking <3449750381@qq.com>
Thu, 10 Oct 2024 07:01:35 +0000 (15:01 +0800)
committerCaisking <3449750381@qq.com>
Thu, 10 Oct 2024 07:01:35 +0000 (15:01 +0800)
code/sdk/application/wearable/fd230app/nativeui/message/src/MessageModel.cpp
code/sdk/application/wearable/service/msg_center/src/msg_center_customer.cpp

index e8eb16f..d413c2d 100644 (file)
@@ -110,7 +110,7 @@ void MessageUnsubscribeTopic(Topic topic) {
 }
 
 // 存储消息更新的定时器
-static std::chrono::milliseconds updateDelay(1000); // 设置更新延迟,1s
+static std::chrono::milliseconds updateDelay(500); // 设置更新延迟,0.5s
 static std::chrono::steady_clock::time_point lastUpdateTime;
 static bool shouldDisplayMessage = false;
 static ancs_data_info_t *lastMessageInfo = NULL;
@@ -121,18 +121,21 @@ static void Notify(void *args, const Topic topic, Request *request) {
   UNUSED(topic);
 
   if (request == NULL) {
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Received NULL request");
     return;
   }
 
-  WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "request %d\r\n", request->msgId);
+  WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Received request %d", request->msgId);
 
   if (request->msgId == TOPIC_EVENT_MESSAGE_UPDATA) {
-    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "TOPIC_EVENT_MESSAGE_UPDATA");
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
+                  "Processing TOPIC_EVENT_MESSAGE_UPDATA");
 
     // 创建新的消息信息
     ancs_data_info_t *messageInfo = new ancs_data_info_t();
     if (messageInfo == NULL) {
-      WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "new ancs_data_info_t fail");
+      WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
+                    "Failed to allocate memory for ancs_data_info_t");
       return;
     }
 
@@ -142,7 +145,7 @@ static void Notify(void *args, const Topic topic, Request *request) {
     if (rets != EOK) {
       delete messageInfo;
       WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
-                    "memcpy_s ancs_data_info_t fail ret = %d", rets);
+                    "memcpy_s ancs_data_info_t failed, ret = %d", rets);
       return;
     }
 
@@ -150,17 +153,13 @@ static void Notify(void *args, const Topic topic, Request *request) {
     MessageModel::GetInstance().AddMessageData(messageInfo);
 
     // 加锁以保护共享变量
-    std::lock_guard<std::mutex> lock(messageMutex);
+    {
+      std::lock_guard<std::mutex> lock(messageMutex);
+      shouldDisplayMessage = true; // 标记需要显示新消息
 
-    // 更新最后一条消息信息
-    if (lastMessageInfo != NULL) {
-      delete lastMessageInfo; // 释放之前保存的消息信息
+      // 设置最后更新时间
+      lastUpdateTime = std::chrono::steady_clock::now();
     }
-    lastMessageInfo = messageInfo; // 保存新的消息信息
-    shouldDisplayMessage = true;   // 标记需要显示新消息
-
-    // 设置最后更新时间
-    lastUpdateTime = std::chrono::steady_clock::now();
   }
 
   // 检查是否需要显示新消息
@@ -170,7 +169,16 @@ static void Notify(void *args, const Topic topic, Request *request) {
     if (shouldDisplayMessage) {
       // 检查是否达到延迟时间
       auto now = std::chrono::steady_clock::now();
-      if (now - lastUpdateTime >= updateDelay) {
+      auto timeDiff = now - lastUpdateTime;
+      WEARABLE_LOGD(
+          WEARABLE_LOG_MODULE_APP, "Time since last update: %lld milliseconds",
+          std::chrono::duration_cast<std::chrono::milliseconds>(timeDiff)
+              .count());
+
+      if (timeDiff >= updateDelay) {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,
+                      "Displaying new message after time delay");
+
         // 发送信息进行弹窗
         if (uapi_dev_runtime_get_train_status() ||
             uapi_dev_runtime_get_saveele_status() ||
@@ -183,10 +191,20 @@ static void Notify(void *args, const Topic topic, Request *request) {
 
         // 发送弹窗通知 会自动查询到数组的最新一个
         CustomEventPublish(TOPIC_EVENT_MESSAGENOTE, NULL, 0);
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Message popup sent");
 
         // 发送完毕,重置标志
         shouldDisplayMessage = false; // 重置状态
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,
+                      "Reset shouldDisplayMessage to false");
+      } else {
+        WEARABLE_LOGD(
+            WEARABLE_LOG_MODULE_APP,
+            "Message display delayed, waiting for next opportunity %d %d",
+            timeDiff, updateDelay);
       }
+    } else {
+      WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "No new message to display");
     }
   }
 }
index 5dd3f2a..f7234fe 100644 (file)
@@ -881,7 +881,7 @@ void MsgCenterNotifyMessageProc(const Topic topic, Request* req)
 {
     //unused(topic);
     unused(req);
-    WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "MsgCenterNotifyMessageProc !");
+    // WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "MsgCenterNotifyMessageProc !");
     if (CheckPriority(topic)) {
         NotificationManager::GetInstance()->SetNotifyPriority(PRIORITY_THREE);
         NotificationManager::GetInstance()->ShowNotify(showMessageNotify, (uint16_t)topic, true);