mirror of
https://github.com/openharmony/ability_ability_runtime.git
synced 2026-08-24 22:21:36 -04:00
!9614 支持UIExtension的UI超时检查:返回原因并安全退出
Merge pull request !9614 from 张亚菲/czx0722
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user