先看一段代码:
public void getActivity(Activity activity) {
//这里面是用来结束activity的代码
}
/**
* 结束指定类名的Activity
*/
public void finishActivity(Class<?> cls) {
for (Activity activity : activityStack) {
if (activity.getClass().equals(cls)) {
getActivity(activity);
}
}
}
上面这段代码是管理activity的工具类中的一个方法,用的是foreach方法,结束指定activity,我用上面这段代码来结束指定的activity时,在Android7.0的手机(我用的是华为6.0系统)下测试时没有什么异常,但是当我在小米7.0的系统或者锤子7.0系统时,抛出异常:
11-21 13:28:18.275: W/System.err(27247): java.util.ConcurrentModificationException
11-21 13:28:18.275: W/System.err(27247): at java.util.Vector$Itr.checkForComodification(Vector.java:1190)
11-21 13:28:18.275: W/System.err(27247): at java.util.Vector$Itr.next(Vector.java:1142)
11-21 13:28:18.275: W/System.err(27247): at com.jianuo.ce.utils.AppManager.finishActivity(AppManager.java:90)
11-21 13:28:18.275: W/System.err(27247): at com.jianuo.ce.activity.EvaluateActivity$4.requestSuccess(EvaluateActivity.java:94)
11-21 13:28:18.275: W/System.err(27247): at com.jianuo.ce.utils.OkHttpUtil$3.run(OkHttpUtil.java:222)
11-21 13:28:18.275: W/System.err(27247): at android.os.Handler.handleCallback(Handler.java:754)
11-21 13:28:18.275: W/System.err(27247): at android.os.Handler.dispatchMessage(Handler.java:95)
11-21 13:28:18.276: W/System.err(27247): at android.os.Looper.loop(Looper.java:163)
11-21 13:28:18.276: W/System.err(27247): at android.app.ActivityThread.main(ActivityThread.java:6365)
11-21 13:28:18.276: W/System.err(27247): at java.lang.reflect.Method.invoke(Native Method)
11-21 13:28:18.276: W/System.err(27247): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:901)
11-21 13:28:18.276: W/System.err(27247): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:791)
把上面的方法改为:
/**
* 和上面方法一样,上面使用foreach方法(会抛出异常java.util.ConcurrentModificationException....)
* 因为在单线程下这种方法会报错,而使用for循环遍历不会出现
*/
public void finish(Class<?> cls) {
for (int i = 0; i < activityStack.size(); i++) {
if (activityStack.get(i).getClass().equals(cls)) {
finishActivity(activityStack.get(i));
}
}
}
“`
出现这个错误的原因,网上一搜一大堆,可以百度查查,总之一句话,报错的原因是foreach循环