AOSP 13 屏蔽系统的crash和anr弹窗

需求

屏蔽系统的crash和anr弹窗

原理

在frameworks/base/services/core/java/com/android/server/am/AppErrors.java的handleShowAppErrorUi方法中做是否屏蔽判断mSystemConfiguration.hideCrashWindow() , 以及ActivityTaskManagerService.java的mShowDialogs属性

实现

frameworks/base/services/core/java/com/android/server/am/AppErrors.java


void handleShowAppErrorUi(Message msg) {
        AppErrorDialog.Data data = (AppErrorDialog.Data) msg.obj;

        .......

        
        if ((mService.mAtmInternal.canShowErrorDialogs() || showBackground)
                        && !crashSilenced && !shouldThottle
                        && (showFirstCrash || showFirstCrashDevOption || data.repeating)
                        && !mSystemConfiguration.hideCrashWindow()) {
                    Slog.i(TAG, "Showing crash dialog for package " + packageName + " u" + userId);
                    errState.getDialogController().showCrashDialogs(data);
                    if (!proc.isolated) {
                        mProcessCrashShowDialogTimes.put(proc.processName, proc.uid, now);
                    }
                } else {
                    // The device is asleep, so just pretend that the user
                    // saw a crash dialog and hit "force quit".
                    if (res != null) {
                        res.set(AppErrorDialog.CANT_SHOW);
                    }
                }
            }
        }

}

frameworks/base/services/core/java/com/android/server/wm/ActivityTaskManagerService.java


private final class SettingObserver extends ContentObserver {
        private final Uri mFontScaleUri = Settings.System.getUriFor(FONT_SCALE);
        private final Uri mHideErrorDialogsUri = Settings.Global.getUriFor(HIDE_ERROR_DIALOGS);
                mWindowOrganizerController.mTaskFragmentOrganizerController;
        mBackNavigationController = BackNavigationController.isEnabled()
                ? new BackNavigationController() : null;
        mSystemConfiguration = SystemConfiguration.getInstance(mContext);
        if (mSystemConfiguration.hideCrashWindow()){
            mShowDialogs = false;

     }
}

ss

ss

private void updateShouldShowDialogsLocked(Configuration config) {

        ........

        mShowDialogs = inputMethodExists&&ActivityTaskManager.currentUiModeSupportsErrorDialogs(config)                 && !hideDialogsSet&& !mSystemConfiguration.hideCrashWindow();

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值