Android Framework 获取所有应用的运行异常情况

2024-04-26 14:12

本文主要是介绍Android Framework 获取所有应用的运行异常情况,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Mdm需求,获取所有应用运行异常情况

  • 实现

Android_source/frameworks/base/core/java/android/app/IActivityManager.aidl

// add getAppRuntimeExceptionInfo
List getAppRuntimeExceptionInfo();

Android_source/frameworks/base/service/core/java/com/android/server/am/ActivityManagerService.java

List<String[]> listErrors = new ArrayList();public List getAppRuntimeExceptionInfo() throws RemoteException{return listErrors;
}void handleApplicationCrashInner(String eventType, ProcessRecord r, String processName, ApplicationErrorReport.CrashInfo crashInfo){...// add getAppRuntimeExceptionInfo starttry {synchronized (this) {if (listErrors.size() == 0) {String[] firstError = new String[2];firstError[0] = packageName;firstError[1] = String.valueOf(1);listErrors.add(firstError);} else {List<String> allErrors = new ArrayList<>();for (int i = 0; i < listErrors.size(); i++) {String[] arrayErrors = listErrors.get(i);List<String> listStrings = Arrays.asList(arrayErrors);allErrors.addAll(listStrings);}for (int i = 0; i < listErrors.size(); i++) {String[] arrayErrors = listErrors.get(i);boolean isContains = allErrors.contains(packageName);if (isContains) {if (packageName.equals(arrayErrors[0])) {int errorCount = Integer.parseInt(arrayErrors[1]);arrayErrors[1] = String.valueOf(errorCount + 1);}} else {String[] newErrors = new String[2];newErrors[0] = packageName;newErrors[1] = String.valueOf(1);listErrors.add(newErrors);break;}}}} catch (Throwable t) {Log.e(TAG, "appExceptionInfo  listErrors ");}// add getAppRuntimeExceptionInfo endmAppErrors.crashApplication(r, crashInfo);}
  • 调用
    /***所有应用运行异常情况** @param* @return List<String []>*                     String[0]:终端应用包名*                     String[1]:终端应用发生异常次数*/public List<String[]> getAppRuntimeExceptionInfo() {LogUtils.v(TAG, "getAppRuntimeExceptionInfo() ");final long ident = Binder.clearCallingIdentity();List<String[]> listResult = new ArrayList();try {listResult= ActivityManager.getService().getAppRuntimeExceptionInfo();LogUtils.v(TAG, "getAppRuntimeExceptionInfo result: " + listResult.toString());} catch (Exception e) {e.printStackTrace();}Binder.restoreCallingIdentity(ident);return listResult;}

这篇关于Android Framework 获取所有应用的运行异常情况的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/937800

相关文章

Java NoClassDefFoundError运行时错误分析解决

《JavaNoClassDefFoundError运行时错误分析解决》在Java开发中,NoClassDefFoundError是一种常见的运行时错误,它通常表明Java虚拟机在尝试加载一个类时未能... 目录前言一、问题分析二、报错原因三、解决思路检查类路径配置检查依赖库检查类文件调试类加载器问题四、常见

SpringBoot整合mybatisPlus实现批量插入并获取ID详解

《SpringBoot整合mybatisPlus实现批量插入并获取ID详解》这篇文章主要为大家详细介绍了SpringBoot如何整合mybatisPlus实现批量插入并获取ID,文中的示例代码讲解详细... 目录【1】saveBATch(一万条数据总耗时:2478ms)【2】集合方式foreach(一万条数

python获取网页表格的多种方法汇总

《python获取网页表格的多种方法汇总》我们在网页上看到很多的表格,如果要获取里面的数据或者转化成其他格式,就需要将表格获取下来并进行整理,在Python中,获取网页表格的方法有多种,下面就跟随小编... 目录1. 使用Pandas的read_html2. 使用BeautifulSoup和pandas3.

SpringBoot UserAgentUtils获取用户浏览器的用法

《SpringBootUserAgentUtils获取用户浏览器的用法》UserAgentUtils是于处理用户代理(User-Agent)字符串的工具类,一般用于解析和处理浏览器、操作系统以及设备... 目录介绍效果图依赖封装客户端工具封装IP工具实体类获取设备信息入库介绍UserAgentUtils

Android使用ImageView.ScaleType实现图片的缩放与裁剪功能

《Android使用ImageView.ScaleType实现图片的缩放与裁剪功能》ImageView是最常用的控件之一,它用于展示各种类型的图片,为了能够根据需求调整图片的显示效果,Android提... 目录什么是 ImageView.ScaleType?FIT_XYFIT_STARTFIT_CENTE

C语言中位操作的实际应用举例

《C语言中位操作的实际应用举例》:本文主要介绍C语言中位操作的实际应用,总结了位操作的使用场景,并指出了需要注意的问题,如可读性、平台依赖性和溢出风险,文中通过代码介绍的非常详细,需要的朋友可以参... 目录1. 嵌入式系统与硬件寄存器操作2. 网络协议解析3. 图像处理与颜色编码4. 高效处理布尔标志集合

Python如何精准判断某个进程是否在运行

《Python如何精准判断某个进程是否在运行》这篇文章主要为大家详细介绍了Python如何精准判断某个进程是否在运行,本文为大家整理了3种方法并进行了对比,有需要的小伙伴可以跟随小编一起学习一下... 目录一、为什么需要判断进程是否存在二、方法1:用psutil库(推荐)三、方法2:用os.system调用

Android实现在线预览office文档的示例详解

《Android实现在线预览office文档的示例详解》在移动端展示在线Office文档(如Word、Excel、PPT)是一项常见需求,这篇文章为大家重点介绍了两种方案的实现方法,希望对大家有一定的... 目录一、项目概述二、相关技术知识三、实现思路3.1 方案一:WebView + Office Onl

Java中的Lambda表达式及其应用小结

《Java中的Lambda表达式及其应用小结》Java中的Lambda表达式是一项极具创新性的特性,它使得Java代码更加简洁和高效,尤其是在集合操作和并行处理方面,:本文主要介绍Java中的La... 目录前言1. 什么是Lambda表达式?2. Lambda表达式的基本语法例子1:最简单的Lambda表

C# foreach 循环中获取索引的实现方式

《C#foreach循环中获取索引的实现方式》:本文主要介绍C#foreach循环中获取索引的实现方式,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、手动维护索引变量二、LINQ Select + 元组解构三、扩展方法封装索引四、使用 for 循环替代