本文主要是介绍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 获取所有应用的运行异常情况的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!