• 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();

    }

  • 相关阅读:
    Stable Diffusion之最全详解图解
    OpenvSwitch + DPDK 实现
    iPhone手机的备忘录怎么改变字体颜色 彩色字体备忘录
    Nginx部署前端,单个项目部署和多个项目部署
    kibana启动报错
    【web自动化测试】
    并发编程day04
    Windows Hook案例分析与技术探索
    机器学习/算法工程师面试题目与答案-数学基础部分
    Unity_相机灵活跟随角色移动
  • 原文地址:https://blog.csdn.net/sg392361615/article/details/82424844