/** * 解析ProcessErrorInfo * @param paramMap */ private String fetchAnrMessage() { ActivityManager manager = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE); int count = 0; //10秒中,没有取到CPU使用信息,直接退出; while(true) { List<ProcessErrorStateInfo> lists = manager.getProcessesInErrorState(); if (lists != null) { for (ProcessErrorStateInfo info : lists) { if (info.condition == ProcessErrorStateInfo.NOT_RESPONDING) { messageStore.put("AnrMessage", info.longMsg); //提取Anr进程CPU占用信息 return info.shortMsg; } } } if (count++ >= 20) { break; } Log.d(TAG, "waiting for process error Info!"); delayReadMessage(500); } return null; }
@Override protected void onStart() { ActivityManager am = (ActivityManager)getContext().getApplicationContext().getSystemService(Context.ACTIVITY_SERVICE); ArrayList<RunningAppProcessInfo> runningProcesses = new ArrayList<RunningAppProcessInfo>(am.getRunningAppProcesses()); final int numProcesses = runningProcesses.size(); int[] runningProcessIds = new int[numProcesses]; for (int i=0; i<numProcesses; i++ ) { runningProcessIds[i] = runningProcesses.get(i).pid; } List<MemoryInfo> memoryInfos = Arrays.asList(am.getProcessMemoryInfo(runningProcessIds)); List<ProcessErrorStateInfo> errorInfos = am.getProcessesInErrorState(); Gson gson = getGson(); JsonObject data = new JsonObject(); data.add("RUNNING_PROCESS_INFO", gson.toJsonTree(runningProcesses)); data.add("RUNNING_PROCESS_MEMORY_INFO", gson.toJsonTree(memoryInfos)); data.add("ERRORED_PROCESS_INFO", gson.toJsonTree(errorInfos)); data.add("CPU_LOAD", gson.toJsonTree(getCpuLoad())); data.add("MEM_INFO", gson.toJsonTree(getMemInfo())); data.add("NET_DEV", gson.toJsonTree(getNetDev())); sendData(data); stop(); }