List getAppRuntimeExceptionInfo();
List<String[]> listErrors = new ArrayList();
public List getAppRuntimeExceptionInfo() throws RemoteException{
return listErrors;
}
void handleApplicationCrashInner(String eventType, ProcessRecord r, String processName, ApplicationErrorReport.CrashInfo crashInfo){
...
try {
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 ");
}
mAppErrors.crashApplication(r, crashInfo);
}
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;
}