android程序运行时,突然挂掉,观察日志显示:
05-21 16:27:16.749 E/AndroidRuntime( 6133): FATAL EXCEPTION: main
05-21 16:27:16.749 E/AndroidRuntime( 6133): java.lang.RuntimeException: Error receiving broadcast Intent { act=com.jrm.tm.keepalive flg=0x14 (has extras) } in com.jrm.tm.cpe.monitor.MonitorComonent$1@4155761805-21 16:27:16.749 E/AndroidRuntime( 6133): at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:768)
05-21 16:27:16.749 E/AndroidRuntime( 6133): at android.os.Handler.handleCallback(Handler.java:725)
05-21 16:27:16.749 E/AndroidRuntime( 6133): at android.os.Handler.dispatchMessage(Handler.java:92)
05-21 16:27:16.749 E/AndroidRuntime( 6133): at android.os.Looper.loop(Looper.java:137)
05-21 16:27:16.749 E/AndroidRuntime( 6133): at android.app.ActivityThread.main(ActivityThread.java:5039)
05-21 16:27:16.749 E/AndroidRuntime( 6133): at java.lang.reflect.Method.invokeNative(Native Method)
05-21 16:27:16.749 E/AndroidRuntime( 6133): at java.lang.reflect.Method.invoke(Method.java:511)
05-21 16:27:16.749 E/AndroidRuntime( 6133): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:829)
05-21 16:27:16.749 E/AndroidRuntime( 6133): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:596)
05-21 16:27:16.749 E/AndroidRuntime( 6133): at dalvik.system.NativeStart.main(Native Method)
05-21 16:27:16.749 E/AndroidRuntime( 6133): Caused by: java.util.ConcurrentModificationException
05-21 16:27:16.749 E/AndroidRuntime( 6133): at java.util.ArrayList$ArrayListIterator.next(ArrayList.java:569)
05-21 16:27:16.749 E/AndroidRuntime( 6133): at java.util.AbstractCollection.toString(AbstractCollection.java:381)
05-21 16:27:16.749 E/AndroidRuntime( 6133): at java.lang.StringBuilder.append(StringBuilder.java:202)
05-21 16:27:16.749 E/AndroidRuntime( 6133): at com.jrm.tm.cpe.monitor.MonitorComonent.getParameters(MonitorComonent.java:691)
05-21 16:27:16.749 E/AndroidRuntime( 6133): at com.jrm.tm.cpe.monitor.MonitorComonent.keepAliveAction(MonitorComonent.java:657)
05-21 16:27:16.749 E/AndroidRuntime( 6133): at com.jrm.tm.cpe.monitor.MonitorComonent.access$0(MonitorComonent.java:656)
05-21 16:27:16.749 E/AndroidRuntime( 6133): at com.jrm.tm.cpe.monitor.MonitorComonent$1.onReceive(MonitorComonent.java:137)
05-21 16:27:16.749 E/AndroidRuntime( 6133): at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:758)
05-21 16:27:16.749 E/AndroidRuntime( 6133): ... 9 more
解法:该异常出现原因,也许在遍历list等集合时,不能修改访问该list,则会异常,直接上代码, 创建一个临时变量代替该list。
Map<String,String> instantHealthTmp=new HashMap<String, String>();
if(instantHealth!=null){
instantHealthTmp.putAll(instantHealth);
}
System.out.println("informHealth:" + informHealth);
System.out.println("instantHealth:" + instantHealth);
if( instantHealthTmp != null && !instantHealthTmp.isEmpty() ){
for( Map.Entry<String, String> tmpMap :instantHealthTmp.entrySet() ){
ModifiableParameterNode node = new ModifiableParameterNode();
node.setName(tmpMap.getKey());
node.setValue(tmpMap.getValue());
list.add(node);
}
}