RK3399 Android7.1系统APP有问题时弹出 没有响应 关系应用 等待

简介: RK3399 Android7.1系统APP有问题时弹出 没有响应 关系应用 等待

一、问题描述

android系统运行不正常的时候会弹出以下框框,需要手动选择。如果想取消弹框,直接关机运行不正常的应用,后台我们自己做守护程序。方法如下

本质是ANR对话框 是类class AppNotRespondingDialog在处理

二、问题定位

点位弹框类在以下路径

base/services/core/java/com/android/server/am/AppNotRespondingDialog.java +110

关闭应用方法接口如下:

mService.killAppAtUsersRequest(proc, null);

怎么找到的如下红色字体:

130 @Override

131 public void onClick(View v) {

132 switch (v.getId()) {

133 case com.android.internal.R.id.aerr_report:

134 mHandler.obtainMessage(WAIT_AND_REPORT).sendToTarget();

135 break;

136 case com.android.internal.R.id.aerr_close:

137 mHandler.obtainMessage(FORCE_CLOSE).sendToTarget();

138 break;

139 case com.android.internal.R.id.aerr_wait:

140 mHandler.obtainMessage(WAIT).sendToTarget();

141 break;

142 default:

143 break;

144 }

145 }

private final Handler mHandler = new Handler() {

148 public void handleMessage(Message msg) {

149 Intent appErrorIntent = null;

150

151 MetricsLogger.action(getContext(), MetricsProto.MetricsEvent.ACTION_APP_ANR,

152 msg.what);

153

154 switch (msg.what) {

155 case FORCE_CLOSE:

156 // Kill the application.

157 mService.killAppAtUsersRequest(mProc, AppNotRespondingDialog.this);

158 break;

159 case WAIT_AND_REPORT:

160 case WAIT:

161 // Continue waiting for the application.

162 synchronized (mService) {

163 ProcessRecord app = mProc;

164

165 if (msg.what == WAIT_AND_REPORT) {

166 appErrorIntent = mService.mAppErrors.createAppErrorIntentLocked(app,

167 System.currentTimeMillis(), null);

168 }

169

170 app.notResponding = false;

171 app.notRespondingReport = null;

172 if (app.anrDialog == AppNotRespondingDialog.this) {

173 app.anrDialog = null;

174 }

175 mService.mServices.scheduleServiceTimeoutLocked(app);

176 }

177 break;

178 }

三、问题解决

搜索AppNotRespondingDialog ,发现在以下路径调用

base/services/core/java/com/android/server/am/AppErrors.java +955

分析代码:

1.不让框框弹出,直接kill应用。屏蔽红色代码,添加蓝色代码即可

950 void handleShowAnrUi(Message msg) {

951 Dialog d = null;

952 synchronized (mService) {

953 HashMap<String, Object> data = (HashMap<String, Object>) msg.obj;

954 ProcessRecord proc = (ProcessRecord)data.get("app");

955 if (proc != null && proc.anrDialog != null) {

956 Slog.e(TAG, "App already has anr dialog: " + proc);

957 MetricsLogger.action(mContext, MetricsProto.MetricsEvent.ACTION_APP_ANR,

958 AppNotRespondingDialog.ALREADY_SHOWING);

959 return;

960 }

961

962 Intent intent = new Intent("android.intent.action.ANR");

963 if (!mService.mProcessesReady) {

964 intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY

965 | Intent.FLAG_RECEIVER_FOREGROUND);

966 }

967 mService.broadcastIntentLocked(null, null, intent,

968 null, null, 0, null, null, null, AppOpsManager.OP_NONE,

969 null, false, false, MY_PID, Process.SYSTEM_UID, 0 / TODO: Verify /);

970

971 boolean showBackground = Settings.Secure.getInt(mContext.getContentResolver(),

972 Settings.Secure.ANR_SHOW_BACKGROUND, 0) != 0;

973 if (mService.canShowErrorDialogs() || showBackground) {

//我们修改的内容就在这里

974 mService.killAppAtUsersRequest(proc, null);

975 // d = new AppNotRespondingDialog(mService,

976 // mContext, proc, (ActivityRecord)data.get("activity"),

977 // msg.arg1 != 0);

978 //proc.anrDialog = d;

979 } else {

980 MetricsLogger.action(mContext, MetricsProto.MetricsEvent.ACTION_APP_ANR,

981 AppNotRespondingDialog.CANT_SHOW);

982 // Just kill the app if there is no dialog to be shown.

983 mService.killAppAtUsersRequest(proc, null);

984 }

985 }

986 // If we've created a crash dialog, show it without the lock held

987 if (d != null) { //

988 //d.closeAnrApp();

989 d.show();

990 }

991 }

相关文章
|
12月前
|
存储 前端开发 API
可配置化App启动弹窗系统:实现后台动态管理与热更新引导-蜻蜓Q系统laravel+vue3-优雅草卓伊凡
可配置化App启动弹窗系统:实现后台动态管理与热更新引导-蜻蜓Q系统laravel+vue3-优雅草卓伊凡
564 5
可配置化App启动弹窗系统:实现后台动态管理与热更新引导-蜻蜓Q系统laravel+vue3-优雅草卓伊凡
|
缓存 小程序 开发工具
最新原创uniapp+vue3仿微信界面聊天app系统
最新原创研发uniapp+vue3实战跨端仿微信App界面聊天程序。支持运行到H5+小程序+APP端。
508 6
最新原创uniapp+vue3仿微信界面聊天app系统
|
12月前
|
Linux 测试技术 语音技术
【车载Android】模拟Android系统的高负载环境
本文介绍如何将Linux压力测试工具Stress移植到Android系统,用于模拟高负载环境下的CPU、内存、IO和磁盘压力,帮助开发者优化车载Android应用在多任务并发时的性能问题,提升系统稳定性与用户体验。
967 6
|
12月前
|
存储 前端开发 安全
实现“永久登录”:针对蜻蜓Q系统的用户体验优化方案(前端uni-app+后端Laravel详解)-优雅草卓伊凡
实现“永久登录”:针对蜻蜓Q系统的用户体验优化方案(前端uni-app+后端Laravel详解)-优雅草卓伊凡
455 5
|
12月前
|
Java 数据库 Android开发
基于Android的电子记账本系统
本项目研究开发一款基于Java与Android平台的开源电子记账系统,采用SQLite数据库和Gradle工具,实现高效、安全、便捷的个人财务管理,顺应数字化转型趋势。
|
缓存 小程序 iOS开发
基于uni-app+vue3手机桌面oadmin管理系统
基于uniapp+vue3+pinia2+uv-ui仿ios手机界面oa后台系统解决方案。支持运行到h5+小程序+app端。
637 5
|
安全 测试技术 虚拟化
Omnissa App Volumes 4, version 2506 - 实时应用程序交付系统
Omnissa App Volumes 4, version 2506 - 实时应用程序交付系统
238 0
|
小程序 Java 关系型数据库
圈子系统公众号app小程序系统源码圈子系统带即时通讯 多级圈子系统源码 兴趣小组系统开源 私密圈子系统代码 会员制社区系统
本圈子系统解决方案提供即时通讯、多级圈子、兴趣小组、私密社区及会员制管理功能。支持开源与商业方案,推荐ThinkSNS+、EasyClub及OpenFire等系统,并提供前后端技术选型建议,助力快速搭建社交平台。
691 0
|
11月前
|
缓存 移动开发 JavaScript
如何优化UniApp开发的App的启动速度?
如何优化UniApp开发的App的启动速度?
1679 139
|
11月前
|
移动开发 JavaScript weex
UniApp开发的App在启动速度方面有哪些优势和劣势?
UniApp开发的App在启动速度方面有哪些优势和劣势?
757 137

热门文章

最新文章