解决天气内存泄漏
authorluozheng <1732036298@qq.com>
Fri, 11 Oct 2024 10:18:35 +0000 (18:18 +0800)
committerluozheng <1732036298@qq.com>
Fri, 11 Oct 2024 10:18:35 +0000 (18:18 +0800)
code/sdk/application/wearable/fd230app/nativeui/weather/src/MainWeatherView.cpp
code/sdk/application/wearable/fd230app/nativeui/weather/src/WeatherControlView.cpp

index 69919a4..cacc5a8 100644 (file)
@@ -2,7 +2,7 @@
  * @Author: luozheng 1732036298@qq.com\r
  * @Date: 2024-01-29 15:37:44\r
  * @LastEditors: luozheng 1732036298@qq.com\r
- * @LastEditTime: 2024-09-03 18:01:48\r
+ * @LastEditTime: 2024-10-11 18:12:42\r
  * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/weather/src/MainWeatherView.cpp\r
  */\r
 #include "weather/include/MainWeatherView.h"\r
@@ -20,6 +20,7 @@ namespace OHOS
     MainWeatherView::~MainWeatherView()\r
     {\r
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "MainWeatherView::~MainWeatherView");\r
+        ClearAll();\r
         g_pMainWeatherView = nullptr;\r
     }\r
 \r
@@ -30,19 +31,8 @@ namespace OHOS
 \r
     void MainWeatherView::ClearAll(void)\r
     {\r
-        if (container_ != nullptr)\r
-        {\r
-            container_->RemoveAll();\r
-            delete container_;\r
-            container_ = nullptr;\r
-        }\r
-\r
         if (weatherSwipeViewList != nullptr)\r
         {\r
-            for (int32_t i = 0; i < maxPage; i++)\r
-            {\r
-                recordCard[i] = nullptr;\r
-            }\r
             weatherSwipeViewList->RemoveAll();\r
 \r
             delete weatherView;\r
@@ -63,6 +53,11 @@ namespace OHOS
             delete getWeatherDataErrorView;\r
             getWeatherDataErrorView = nullptr;\r
         }\r
+        \r
+        for (int32_t i = 0; i < maxPage; i++)\r
+        {\r
+            recordCard[i] = nullptr;\r
+        }\r
     }\r
 \r
     // 设置按键监听\r
@@ -189,8 +184,12 @@ namespace OHOS
     {\r
         View<MainWeatherPresenter>::OnStop();\r
         RootView::GetInstance()->ClearOnKeyActListener();\r
-\r
-        ClearAll();\r
+        if (container_ != nullptr)\r
+        {\r
+            container_->RemoveAll();\r
+            delete container_;\r
+            container_ = nullptr;\r
+        }\r
         return;\r
     }\r
 \r
index 1eb0079..4de1320 100644 (file)
@@ -2,7 +2,7 @@
  * @Author: luozheng 1732036298@qq.com
  * @Date: 2024-01-29 15:37:44
  * @LastEditors: luozheng 1732036298@qq.com
- * @LastEditTime: 2024-09-03 18:01:21
+ * @LastEditTime: 2024-10-11 18:10:13
  * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/weather/src/WeatherControlView.cpp
  */
 #include "weather/include/WeatherControlView.h"
@@ -35,32 +35,26 @@ namespace OHOS
         if (viewiInitStatus == true)
         {
             RemoveAll();
-            if (mainWeatherView != nullptr)
-            {
-                if (weatherOnSwipeListener != nullptr)
-                {
-                    delete weatherOnSwipeListener;
-                    weatherOnSwipeListener = nullptr;
-                }
-
-                if (mainWeatherView != nullptr)
-                {
-                    delete mainWeatherView;
-                    mainWeatherView = nullptr;
-                }
-            }
+            delete weatherOnSwipeListener;
+            weatherOnSwipeListener = nullptr;
+
+            delete mainWeatherView;
+            mainWeatherView = nullptr;
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "WeatherControlView::ClearAll success!!");
         }
     }
 
     bool WeatherControlView::CreateMainWeatherView()
     {
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "WeatherControlView::InitView");
-
-        mainWeatherView = new MainWeatherView();
         if (mainWeatherView == nullptr)
         {
-            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "WeatherView::new mainWeatherView fail!");
-            return false;
+            mainWeatherView = new MainWeatherView();
+            if (mainWeatherView == nullptr)
+            {
+                WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "WeatherView::new mainWeatherView fail!");
+                return false;
+            }
         }
 
         return true;
@@ -69,18 +63,24 @@ namespace OHOS
     // 天气数据有效初始化该视图
     bool WeatherControlView::InitializeWeatherSwipeView()
     {
-        weatherSwipView = mainWeatherView->MainWeatherViewInit();
         if (weatherSwipView == nullptr)
         {
-            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "mainWeatherView->MainWeatherViewInit() == nullptr!!");
-            return false;
+            weatherSwipView = mainWeatherView->MainWeatherViewInit();
+            if (weatherSwipView == nullptr)
+            {
+                WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "mainWeatherView->MainWeatherViewInit() == nullptr!!");
+                return false;
+            }
         }
 
-        weatherOnSwipeListener = static_cast<UISwipeView::OnSwipeListener *>(new WeatherControlViewOnSwipeListener());
         if (weatherOnSwipeListener == nullptr)
         {
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "weatherOnSwipeListener new fail");
-            return false;
+            weatherOnSwipeListener = static_cast<UISwipeView::OnSwipeListener *>(new WeatherControlViewOnSwipeListener());
+            if (weatherOnSwipeListener == nullptr)
+            {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "weatherOnSwipeListener new fail");
+                return false;
+            }
         }
 
         // weatherSwipView->SetOnSwipeListener(weatherOnSwipeListener);
@@ -93,11 +93,14 @@ namespace OHOS
     // 无天气数据则初始化该视图
     bool WeatherControlView::InitializeWeatherDataErrorView()
     {
-        weatherScrllView = mainWeatherView->WeatherDataErrorViewPageInit();
         if (weatherScrllView == nullptr)
         {
-            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "mainWeatherView->WeatherDataErrorViewPageInit() == nullptr!!");
-            return false;
+            weatherScrllView = mainWeatherView->WeatherDataErrorViewPageInit();
+            if (weatherScrllView == nullptr)
+            {
+                WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "mainWeatherView->WeatherDataErrorViewPageInit() == nullptr!!");
+                return false;
+            }
         }
 
         weatherScrllView->SetVisible(true); // 默认没有天气数据