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

    }

  • 相关阅读:
    《数据结构-第一章》之顺序表
    vue3实现懒加载
    看源码逐行学习ChatGLM2-6B大模型,项目中的modeling_chatglm.py文件
    【Python入门】文件内容操作
    2.15 这样的小红书图片内容,最容易“踩雷”!【玩赚小红书】
    stm32 中字与字节的关系
    鸿蒙系统扫盲(一):鸿蒙OS和开源鸿蒙什么关系?
    微信小程序详细教程-建议收藏
    Nginx网站服务
    自动化状态监测和工业4.0解决方案-Softing uaGate SI
  • 原文地址:https://blog.csdn.net/sg392361615/article/details/82424844