diff --git a/services/cloudfiledaemon/src/cloud_disk/io_message_listener.cpp b/services/cloudfiledaemon/src/cloud_disk/io_message_listener.cpp index 8bf0b017ab9a40da677bd3a1cd3c651790bf754b..cefb5c42cdc200e18e5e3779cf0703a68c7e5d80 100644 --- a/services/cloudfiledaemon/src/cloud_disk/io_message_listener.cpp +++ b/services/cloudfiledaemon/src/cloud_disk/io_message_listener.cpp @@ -164,26 +164,35 @@ void IoMessageManager::RecordIoData() void IoMessageManager::OnReceiveEvent(const AppExecFwk::AppStateData &appStateData) { - if (appStateData.bundleName != DESK_BUNDLE_NAME) { - if (appStateData.state == TYPE_FRONT) { - lastestAppStateData = appStateData; - if (!ioThread.joinable()) { + if (appStateData.bundleName == DESK_BUNDLE_NAME) { + return; + } + if (appStateData.state == TYPE_FRONT) { + lastestAppStateData = appStateData; + if (!ioThread.joinable()) { + try { isThreadRunning.store(true); ioThread = thread(&IoMessageManager::RecordIoData, this); - } - return; - } - if (appStateData.state == TYPE_BACKGROUND) { - if (ioThread.joinable()) { - lock_guard lock(cvMute); + } catch (const std::system_error &e) { + LOGE("System error while creating thread: %{public}s", e.what()); + isThreadRunning.store(false); + } catch (const std::exception &e) { + LOGE("Exception while creating thread: %{public}s", e.what()); isThreadRunning.store(false); - sleepCv.notify_all(); - ioThread.join(); - ioThread = thread(); - currentData = {}; - preData = {}; } } + return; + } + if (appStateData.state == TYPE_BACKGROUND) { + if (ioThread.joinable()) { + lock_guard lock(cvMute); + isThreadRunning.store(false); + sleepCv.notify_all(); + ioThread.join(); + ioThread = thread(); + currentData = {}; + preData = {}; + } } } } // namespace CloudDisk diff --git a/test/unittests/cloud_disk/io_message_listener_test.cpp b/test/unittests/cloud_disk/io_message_listener_test.cpp index 89faf55bb45687eb4413d3406c7b6a06067c4dea..a47900c7780a786ab77618e891d78c9db07e8d3e 100644 --- a/test/unittests/cloud_disk/io_message_listener_test.cpp +++ b/test/unittests/cloud_disk/io_message_listener_test.cpp @@ -1338,4 +1338,25 @@ HWTEST_F(IoMessageListenerTest, OnReceiveEventTest005, TestSize.Level1) GTEST_LOG_(INFO) << "OnReceiveEventTest005 End"; } +/** + * @tc.name: OnReceiveEventTest006 + * @tc.desc: Read IO data + * @tc.type: FUNC + * @tc.require: issuesI92WQP + */ +HWTEST_F(IoMessageListenerTest, OnReceiveEventTest006, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "OnReceiveEventTest006 Start"; + try { + AppExecFwk::AppStateData appStateData; + appStateData.bundleName = "com.ohos.sceneboard"; + ioMessageManager_->OnReceiveEvent(appStateData); + EXPECT_TRUE(true); + } catch (...) { + EXPECT_TRUE(false); + GTEST_LOG_(INFO) << "OnReceiveEventTest006 ERROR"; + } + GTEST_LOG_(INFO) << "OnReceiveEventTest006 End"; +} + } // namespace OHOS::FileManagement::CloudDisk::Test \ No newline at end of file