屏蔽应用报错弹框和无响应弹框

本文详细解析了Android系统中ActivityManagerService (AMS) 的代码变更,重点介绍了对话框显示条件及应用异常处理流程的变化。
diff --git a/frameworks/base/services/java/com/android/server/am/ActivityManagerService.java b/frameworks/base/services/java/com/android/server/am/ActivityManagerService.java
index f33ee52..d6dfde5 100755
--- a/frameworks/base/services/java/com/android/server/am/ActivityManagerService.java
+++ b/frameworks/base/services/java/com/android/server/am/ActivityManagerService.java
@@ -1139,7 +1139,12 @@ public final class ActivityManagerService extends ActivityManagerNative
                         }
                         return;
                     }
-                    if (mShowDialogs && !mSleeping && !mShuttingDown) {
+					
+					if (res != null) {
+                        res.set(0);
+                    }
+                    //delete by cxs
+                    /*if (mShowDialogs && !mSleeping && !mShuttingDown) {
                         Dialog d = new AppErrorDialog(mContext,
                                 ActivityManagerService.this, res, proc);
                         d.show();
@@ -1150,7 +1155,7 @@ public final class ActivityManagerService extends ActivityManagerNative
                         if (res != null) {
                             res.set(0);
                         }
-                    }
+                    }*/
                 }
 
                 ensureBootCompleted();
@@ -1173,7 +1178,9 @@ public final class ActivityManagerService extends ActivityManagerNative
                             null, null, 0, null, null, null, AppOpsManager.OP_NONE,
                             false, false, MY_PID, Process.SYSTEM_UID, 0 /* TODO: Verify */);
 
-                    if (mShowDialogs) {
+				    killAppAtUsersRequest(proc, null);
+					//delete by cxs
+                   /* if (mShowDialogs) {
                         Dialog d = new AppNotRespondingDialog(ActivityManagerService.this,
                                 mContext, proc, (ActivityRecord)data.get("activity"),
                                 msg.arg1 != 0);
@@ -1182,7 +1189,7 @@ public final class ActivityManagerService extends ActivityManagerNative
                     } else {
                         // Just kill the app if there is no dialog to be shown.
                         killAppAtUsersRequest(proc, null);
-                    }
+                    }*/
                 }
 
                 ensureBootCompleted();

 

在使用 Visual Studio 2022 Qt 5.15.2 开发应用程序时,如果需要实现强制关闭程序且不显示任何错误提示的功能,可以通过以下方式实现: ### 强制退出程序 在 Qt 应用程序中,通常可以调用 `QApplication::quit()` 或 `QCoreApplication::exit()` 来终止程序。然而,在某些特殊情况下(例如异常处理或资源释放失败),Qt 可能会出错误提示。为了避免这种情况,需要确保程序的退出路径不会触发任何 UI 提示,避免依赖 Qt 的自动清理机制。 #### 使用 `std::exit` 强制退出 可以通过标准库函数 `std::exit` 直接终止进程,这将跳过所有 C++ 析构函数 Qt 的清理流程,从而避免窗[^1]。该方法适用于紧急退出或崩溃恢复场景: ```cpp #include <cstdlib> // 强制退出程序,不进行任何清理 std::exit(0); ``` #### 使用 `TerminateProcess`(Windows 平台) 在 Windows 上,也可以使用 Win32 API 中的 `TerminateProcess` 函数立即终止当前进程。这种方式更加激进,适用于必须立刻退出的情况: ```cpp #include <windows.h> #include <processthreadsapi.h> // 获取当前进程句柄终止 HANDLE hProcess = GetCurrentProcess(); TerminateProcess(hProcess, 0); ``` 此方法会直接结束进程,不执行任何析构函数或清理代码,因此应谨慎使用。 #### 避免 Qt 窗提示 为了防止 Qt 在异常退出时出错误提示,可以在主函数中设置 Qt 的消息处理机制,屏蔽掉默认的错误对话: ```cpp #include <QApplication> #include <QMessageBox> #include <QDebug> void messageHandler(QtMsgType type, const QMessageLogContext &context, const QString &msg) { // 忽略所有消息,不显示窗 Q_UNUSED(type); Q_UNUSED(context); Q_UNUSED(msg); } int main(int argc, char *argv[]) { qInstallMessageHandler(messageHandler); // 安装自定义消息处理器 QApplication app(argc, argv); // 应用逻辑... return app.exec(); } ``` 通过上述方法,可以有效阻止 Qt 在运行期间因警告或错误信息而出提示[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值