!9614 支持UIExtension的UI超时检查:返回原因并安全退出

Merge pull request !9614 from 张亚菲/czx0722
This commit is contained in:
openharmony_ci
2024-07-27 12:19:13 +00:00
committed by Gitee
3 changed files with 33 additions and 1 deletions
@@ -22,6 +22,7 @@
#include "hilog_tag_wrapper.h"
#include "hitrace_meter.h"
#include "running_process_info.h"
#include "exit_reason.h"
namespace OHOS {
namespace AbilityRuntime {
@@ -790,6 +791,11 @@ void ApplicationContext::RegisterAppFontObserver(AppConfigUpdateCallback appFont
appFontCallback_ = appFontCallback;
}
void ApplicationContext::RegisterProcessSecurityExit(AppProcessExitCallback appProcessExitCallback)
{
appProcessExitCallback_ = appProcessExitCallback;
}
std::string ApplicationContext::GetAppRunningUniqueId() const
{
TAG_LOGD(AAFwkTag::APPKIT, "GetAppRunningUniqueId is %{public}s", appRunningUniqueId_.c_str());
@@ -835,5 +841,16 @@ void ApplicationContext::SetCurrentAppMode(int32_t appMode)
TAG_LOGD(AAFwkTag::APPKIT, "setCurrentAppMode is %{public}d", appMode);
appMode_ = appMode;
}
void ApplicationContext::ProcessSecurityExit(const AAFwk::ExitReason &exitReason)
{
if (appProcessExitCallback_ == nullptr) {
TAG_LOGE(AAFwkTag::APPKIT, "callback is invalid");
return;
}
TAG_LOGI(AAFwkTag::APPKIT, "Proc exit, reason: %{public}s", exitReason.exitMsg.c_str());
appProcessExitCallback_(exitReason);
}
} // namespace AbilityRuntime
} // namespace OHOS
+11 -1
View File
@@ -1644,7 +1644,7 @@ void MainThread::HandleLaunchApplication(const AppLaunchData &appLaunchData, con
TAG_LOGI(AAFwkTag::APPKIT, "hisysevent write result=%{public}d, send event [FRAMEWORK,PROCESS_KILL],"
" pid=%{public}d, processName=%{public}s, msg=%{public}s", result, pid, processName.c_str(),
KILL_REASON);
if (ApplicationDataManager::GetInstance().NotifyUnhandledException(summary) &&
ApplicationDataManager::GetInstance().NotifyExceptionObject(appExecErrorObj)) {
return;
@@ -1664,6 +1664,16 @@ void MainThread::HandleLaunchApplication(const AppLaunchData &appLaunchData, con
(static_cast<AbilityRuntime::CJRuntime&>(*runtime)).RegisterUncaughtExceptionHandler(expectionInfo);
}
#endif
wptr<MainThread> weak = this;
auto callback = [weak](const AAFwk::ExitReason &exitReason) {
auto appThread = weak.promote();
if (appThread == nullptr) {
TAG_LOGE(AAFwkTag::APPKIT, "Main thread is nullptr");
}
AbilityManagerClient::GetInstance()->RecordAppExitReason(exitReason);
appThread->ScheduleProcessSecurityExit();
};
applicationContext->RegisterProcessSecurityExit(callback);
application_->SetRuntime(std::move(runtime));
@@ -27,9 +27,11 @@
namespace OHOS {
namespace AAFwk {
class Want;
struct ExitReason;
}
namespace AbilityRuntime {
using AppConfigUpdateCallback = std::function<void(const AppExecFwk::Configuration &config)>;
using AppProcessExitCallback = std::function<void(const AAFwk::ExitReason &exitReason)>;
class ApplicationContext : public Context {
public:
ApplicationContext() = default;
@@ -133,6 +135,7 @@ public:
void SetApplicationInfoUpdateFlag(bool flag);
void RegisterAppConfigUpdateObserver(AppConfigUpdateCallback appConfigChangeCallback);
void RegisterAppFontObserver(AppConfigUpdateCallback appFontCallback);
void RegisterProcessSecurityExit(AppProcessExitCallback appProcessExitCallback);
std::string GetAppRunningUniqueId() const;
void SetAppRunningUniqueId(const std::string &appRunningUniqueId);
@@ -141,6 +144,7 @@ public:
void SetCurrentAppCloneIndex(int32_t appIndex);
int32_t GetCurrentAppMode();
void SetCurrentAppMode(int32_t appIndex);
void ProcessSecurityExit(const AAFwk::ExitReason &exitReason);
using SelfType = ApplicationContext;
static const size_t CONTEXT_TYPE_ID;
@@ -162,6 +166,7 @@ private:
bool applicationInfoUpdateFlag_ = false;
AppConfigUpdateCallback appConfigChangeCallback_ = nullptr;
AppConfigUpdateCallback appFontCallback_ = nullptr;
AppProcessExitCallback appProcessExitCallback_ = nullptr;
std::string appRunningUniqueId_;
int32_t appIndex_ = 0;
int32_t appMode_ = 0;