From: luozheng <1732036298@qq.com> Date: Thu, 19 Sep 2024 12:53:58 +0000 (+0800) Subject: 1.解决语言界面内存泄漏问题 X-Git-Url: http://git.snicker.com.cn/css/static/gitweb.css?a=commitdiff_plain;h=eaa4bf5c9a67c96c94e0ec6b24e53c44cffb8b18;p=mirrors%2FFD230.git 1.解决语言界面内存泄漏问题 2.解决.#741语言选择界面上滑时底部会有黑边,使用编码器时无此情况bug 3.解决系统界面的内存泄漏问题,并使用一个辅助组件解决系统视图最后一个按钮被则挡住bug --- diff --git a/code/sdk/application/wearable/fd230app/nativeui/languagecode/src/LanguageSwitchListitemView.cpp b/code/sdk/application/wearable/fd230app/nativeui/languagecode/src/LanguageSwitchListitemView.cpp index 1a584fd12..5f63bca0f 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/languagecode/src/LanguageSwitchListitemView.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/languagecode/src/LanguageSwitchListitemView.cpp @@ -1,8 +1,8 @@ /* * @Author: luozheng 1732036298@qq.com * @Date: 2024-03-28 14:28:03 - * @LastEditors: SnickerSun snickersun@163.com - * @LastEditTime: 2024-08-30 20:49:17 + * @LastEditors: luozheng 1732036298@qq.com + * @LastEditTime: 2024-09-19 16:35:47 * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/languagecode/src/LanguageSwitchListitemView.cpp */ #include "languagecode/include/LanguageSwitchListitemView.h" @@ -28,6 +28,7 @@ namespace OHOS { WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "LanguageSwitchListitemView::~LanguageSwitchListitemView"); Remove(&m_LabelButtonExt); + Remove(&languae_Image); } void LanguageSwitchListitemView::SetItemInfo(const Language itemInfo) diff --git a/code/sdk/application/wearable/fd230app/nativeui/languagecode/src/LanguageSwitchView.cpp b/code/sdk/application/wearable/fd230app/nativeui/languagecode/src/LanguageSwitchView.cpp index 58e906b68..de74878b7 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/languagecode/src/LanguageSwitchView.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/languagecode/src/LanguageSwitchView.cpp @@ -19,8 +19,8 @@ namespace OHOS static constexpr int16_t MAX_SCROLL_DIS = 1000; static constexpr int16_t MAX_REBOUND_SIZE = 40; static constexpr int16_t MAX_LANGUAGE_LIST_SCROLLBLANKSIZE = 50; - static constexpr int16_t ROTATEFACTORVALUE = 4; - + static constexpr int16_t ROTATEFACTORVALUE = 1.0; + static LanguageSwitchView *g_pLanguageSwitchView{nullptr}; LanguageSwitchView::LanguageSwitchView() { @@ -59,35 +59,56 @@ namespace OHOS void LanguageSwitchView::ClearAll(void) { - if (LanguageSwitchScrollView != nullptr) + if (container_ != nullptr) { - LanguageSwitchScrollView->RemoveAll(); - - delete LanguageSwitchViewTitleLabel; - LanguageSwitchViewTitleLabel = nullptr; - - delete p_LanguageSwitchListAdapter; - p_LanguageSwitchListAdapter = nullptr; - - delete LanguageList; - LanguageList = nullptr; - - delete LanguageSwitchScrollView; - LanguageSwitchScrollView = nullptr; - - if(group) + container_->RemoveAll(); + if (LanguageSwitchScrollView != nullptr) + { + LanguageSwitchScrollView->RemoveAll(); + if (LanguageSwitchViewTitleLabel) + { + delete LanguageSwitchViewTitleLabel; + LanguageSwitchViewTitleLabel = nullptr; + } + if (p_LanguageSwitchListAdapter) + { + delete p_LanguageSwitchListAdapter; + p_LanguageSwitchListAdapter = nullptr; + } + if (LanguageList) + { + delete LanguageList; + LanguageList = nullptr; + } + delete LanguageSwitchScrollView; + LanguageSwitchScrollView = nullptr; + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "LanguageSwitchView::ClearAll LanguageSwitchScrollView over!!"); + } + if (group != nullptr) { group->RemoveAll(); - - delete button_cancel; - button_cancel = nullptr; - - delete button_ensure; - button_ensure = nullptr; - - delete LanguageSwitchViewhintLabel; - LanguageSwitchViewhintLabel = nullptr; + if (button_cancel) + { + delete button_cancel; + button_cancel = nullptr; + } + if (button_ensure) + { + delete button_ensure; + button_ensure = nullptr; + } + if (LanguageSwitchViewhintLabel) + { + delete LanguageSwitchViewhintLabel; + LanguageSwitchViewhintLabel = nullptr; + } + delete group; + group = nullptr; + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "LanguageSwitchView::ClearAll group over!!"); } + delete container_; + container_ = nullptr; + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "LanguageSwitchView::ClearAll over!!"); } } @@ -101,7 +122,7 @@ namespace OHOS return false; } LanguageSwitchScrollView->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight()); - LanguageSwitchScrollView->SetScrollBlankSize(MAX_LANGUAGE_LIST_SCROLLBLANKSIZE); + // LanguageSwitchScrollView->SetScrollBlankSize(MAX_LANGUAGE_LIST_SCROLLBLANKSIZE); LanguageSwitchScrollView->SetHorizontalScrollState(false); LanguageSwitchScrollView->SetTouchable(true); LanguageSwitchScrollView->SetDraggable(true); @@ -149,15 +170,18 @@ namespace OHOS WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "LanguageSwitchView::LanguageList is nullptr!"); return false; } - LanguageList->SetPosition(LANGUAGE_LIST_X, LANGUAGE_LIST_Y, HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION); + LanguageList->SetPosition(LANGUAGE_LIST_X, LANGUAGE_LIST_Y, HORIZONTAL_RESOLUTION, 346); LanguageList->SetStyle(STYLE_BACKGROUND_COLOR, 0xff000000); - LanguageList->SetScrollBlankSize(MAX_LANGUAGE_LIST_SCROLLBLANKSIZE); - LanguageList->EnableAutoAlign(true); // 设置此列表的自动对齐状态。当滚动停止时,子视图被选中,其位置自动与预设位置对齐 - LanguageList->SetThrowDrag(true); // 设置手指抬起屏幕后是否继续滚动。 - LanguageList->SetMaxScrollDistance(MAX_SCROLL_DIS); // 设置手指抬起屏幕后的最大滚动距离。 - LanguageList->SetReboundSize(MAX_REBOUND_SIZE); - LanguageList->SetRotateFactor(ROTATEFACTORVALUE); + LanguageList->EnableAutoAlign(true); // 设置此列表的自动对齐状态。当滚动停止时,子视图被选中,其位置自动与预设位置对齐 + LanguageList->SetThrowDrag(true); // 设置手指抬起屏幕后是否继续滚动。 + LanguageList->SetMaxScrollDistance(1000); // 设置手指抬起屏幕后的最大滚动距离。 + LanguageList->SetSwipeACCLevel(800); /*设置手指抬起屏幕后的补偿距离。*/ + LanguageList->SetReboundSize(30); + LanguageList->SetScrollBlankSize(20); + LanguageList->SetStartIndex(0); FocusManager::GetInstance()->RequestFocus(LanguageList); + FocusManager::GetInstance()->RequestFocusByDirection(FOCUS_DIRECTION_UP); + LanguageList->SetRotateFactor(1.0); return true; } @@ -171,13 +195,13 @@ namespace OHOS } } - void LanguageSwitchView::show_hint_group(std::string code,bool data) + void LanguageSwitchView::show_hint_group(std::string code, bool data) { group->SetVisible(data); RootView::GetInstance()->Invalidate(); - if(data) + if (data) { - hint_id_code=code; + hint_id_code = code; } return; } @@ -187,18 +211,16 @@ namespace OHOS return button_cancel; } - UIButton *LanguageSwitchView::GetLanguagebutton_ensure(void) { return button_ensure; } - //Take effect after restart + // Take effect after restart void LanguageSwitchView::InithintView() { - group = new UIViewGroup(); - if(group==nullptr) + if (group == nullptr) { return; } @@ -207,13 +229,13 @@ namespace OHOS group->SetDraggable(true); group->SetOnDragListener(presenter_); - - if (LanguageSwitchViewhintLabel == nullptr) { - LanguageSwitchViewhintLabel = new UILabel(); + if (LanguageSwitchViewhintLabel == nullptr) + { + LanguageSwitchViewhintLabel = new UILabel(); } - LanguageSwitchViewhintLabel->SetPosition(47, 194); // widget's left position and top position - LanguageSwitchViewhintLabel->Resize(370, 60); // widget's width and height - LanguageSwitchViewhintLabel->SetViewId("label1");// Set style + LanguageSwitchViewhintLabel->SetPosition(47, 194); // widget's left position and top position + LanguageSwitchViewhintLabel->Resize(370, 60); // widget's width and height + LanguageSwitchViewhintLabel->SetViewId("label1"); // Set style LanguageSwitchViewhintLabel->SetStyle(STYLE_TEXT_FONT, 30); LanguageSwitchViewhintLabel->SetText("Take effect after restart"); @@ -225,13 +247,11 @@ namespace OHOS group->Add(LanguageSwitchViewhintLabel); LanguageSwitchViewhintLabel->SetVisible(true); - - button_cancel = new UIButton(); if (button_cancel == nullptr) { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemShutdown::new button_cancel fail!"); - return ; + return; } button_cancel->SetPosition(97, 299, 130, 130); button_cancel->SetStyle(STYLE_BACKGROUND_COLOR, 0xffffffff); @@ -247,7 +267,7 @@ namespace OHOS if (button_ensure == nullptr) { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemShutdown::new button_ensure fail!"); - return ; + return; } button_ensure->SetPosition(240, 299, 130, 130); button_ensure->SetStyle(STYLE_BACKGROUND_COLOR, 0xffffffff); @@ -262,15 +282,18 @@ namespace OHOS button_cancel->SetOnClickListener(presenter_); button_ensure->SetOnClickListener(presenter_); group->SetVisible(false); - } - void LanguageSwitchView::OnStart() { WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "LanguageSwitchView::OnStart"); View::OnStart(); SetContainerView(new UIViewGroup()); + if (GetContainer() == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SetContainerView fail!!"); + return; + } container_->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight()); container_->SetTouchable(true); container_->SetDraggable(true); @@ -303,12 +326,6 @@ namespace OHOS { WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "LanguageSwitchView::OnStop"); View::OnStop(); - if (container_ != nullptr) - { - container_->RemoveAll(); - delete container_; - container_ = nullptr; - } RootView::GetInstance()->ClearOnKeyActListener(); FocusManager::GetInstance()->ClearFocus(); ClearAll(); diff --git a/code/sdk/application/wearable/fd230app/nativeui/system/include/SystemView.h b/code/sdk/application/wearable/fd230app/nativeui/system/include/SystemView.h index 14afb967d..16239faee 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/system/include/SystemView.h +++ b/code/sdk/application/wearable/fd230app/nativeui/system/include/SystemView.h @@ -2,7 +2,7 @@ * @Author: luozheng 1732036298@qq.com * @Date: 2024-03-30 18:29:39 * @LastEditors: luozheng 1732036298@qq.com - * @LastEditTime: 2024-08-28 19:43:28 + * @LastEditTime: 2024-09-19 20:07:09 * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/system/include/SystemView.h */ #ifndef SYSTEM_VIEW_H @@ -111,9 +111,10 @@ namespace OHOS void NeedToUpdateImageinit(void); UILabelExt *Title{nullptr}; // 标题 UIScrollView *SystemScrollView[MAX_SYSTEMVIEWID]{nullptr}; - UILabelButtonExt *SystemViewLabelButton[5]{nullptr}; - UILabelExt *SystemViewLabel[5]{nullptr}; + UILabelButtonExt *SystemViewLabelButton[7]{nullptr}; + UILabelExt *SystemViewLabel[7]{nullptr}; UIImageView *NeedToUpdateImage{nullptr}; // 提示需要系统更新的icon图片 + UIImageView *temp{nullptr}; bool viewInitStatus{false}; }; } // namespace OHOS diff --git a/code/sdk/application/wearable/fd230app/nativeui/system/src/SystemView.cpp b/code/sdk/application/wearable/fd230app/nativeui/system/src/SystemView.cpp index 182c659a2..19dbe79f7 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/system/src/SystemView.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/system/src/SystemView.cpp @@ -39,7 +39,7 @@ namespace OHOS delete Title; Title = nullptr; } - for (int i = 0; i < 5; i++) + for (int i = 0; i < sizeof(SystemViewLabelButton) / sizeof(SystemViewLabelButton[0]); i++) { if (SystemViewLabelButton[i] != nullptr) { @@ -58,6 +58,11 @@ namespace OHOS delete NeedToUpdateImage; NeedToUpdateImage = nullptr; } + if (temp != nullptr) + { + delete temp; + temp = nullptr; + } delete SystemScrollView[SYSTEMVIEW]; SystemScrollView[SYSTEMVIEW] = nullptr; } @@ -131,7 +136,7 @@ namespace OHOS bool SystemView::CreateSystemViewLabel(void) { - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SystemView::CreateSystemViewLabel"); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemView::CreateSystemViewLabel"); LabelConfig labelConfig = { .left = 83, .top = 50, @@ -195,7 +200,7 @@ namespace OHOS bool SystemView::CreateSystemViewLabelButton(void) { - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SystemView::CreateSystemViewLabelButton"); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemView::CreateSystemViewLabelButton"); struct ButtonSetup { int y; @@ -234,7 +239,7 @@ namespace OHOS bool SystemView::CreateSystemScrollView(void) { - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SystemView::CreateSystemScrollView"); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemView::CreateSystemScrollView"); SystemScrollView[SYSTEMVIEW] = new UIScrollView(); if (SystemScrollView[SYSTEMVIEW] == nullptr) { @@ -243,12 +248,14 @@ namespace OHOS } SystemScrollView[SYSTEMVIEW]->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight()); SystemScrollView[SYSTEMVIEW]->SetStyle(STYLE_BACKGROUND_OPA, 0xff); - SystemScrollView[SYSTEMVIEW]->SetScrollBlankSize(75); - SystemScrollView[SYSTEMVIEW]->SetReboundSize(35); + SystemScrollView[SYSTEMVIEW]->SetScrollBlankSize(30); + SystemScrollView[SYSTEMVIEW]->SetReboundSize(30); SystemScrollView[SYSTEMVIEW]->SetDirection(1); SystemScrollView[SYSTEMVIEW]->SetThrowDrag(true); // 设置手指抬起屏幕后是否继续滚动。 SystemScrollView[SYSTEMVIEW]->SetMaxScrollDistance(1000); // 设置手指抬起屏幕后的最大滚动距离。 - SystemScrollView[SYSTEMVIEW]->RequestFocus(); + SystemScrollView[SYSTEMVIEW]->SetSwipeACCLevel(800); /*设置手指抬起屏幕后的补偿距离。*/ + FocusManager::GetInstance()->RequestFocus(SystemScrollView[SYSTEMVIEW]); + FocusManager::GetInstance()->RequestFocusByDirection(FOCUS_DIRECTION_UP); SystemScrollView[SYSTEMVIEW]->SetRotateFactor(1.0); SystemScrollView[SYSTEMVIEW]->SetOnDragListener(presenter_); SystemScrollView[SYSTEMVIEW]->SetTouchable(true); @@ -279,12 +286,22 @@ namespace OHOS void SystemView::CreateSystemView(void) { - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SystemView::CreateSystemView"); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemView::CreateSystemView"); if (!CreateSystemScrollView() || !CreateSystemViewLabelButton() || !CreateSystemViewLabel()) { - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SystemView::CreateSystemView"); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemView::CreateSystemView fail!!"); return; } + if (temp == nullptr) + { + temp = new UIImageView(); + if (temp == nullptr) + { + return; + } + temp->SetPosition(43, 960, 380, 40); + SystemScrollView[SYSTEMVIEW]->Add(temp); + } viewInitStatus = true; }