uni-app APP频繁闪退 报java.util.ConcurrentModificationException错误 日志显示通过bugly集成发现
uni-app APP频繁闪退 报java.util.ConcurrentModificationException错误 日志显示通过bugly集成发现
| 信息类别 | 信息内容 |
|---|---|
| 产品分类 | uniapp/App |
| PC开发环境 | Mac |
| PC系统版本 | MacOS14.5 |
| HBuilderX | 正式 |
| HBuilderX版本 | 4.15 |
| 手机系统 | Android |
| 手机系统版本 | Android 12 |
| 手机厂商 | 华为 |
| 页面类型 | vue |
| vue版本 | vue2 |
| 打包方式 | 云端 |
| 项目创建方式 | HBuilderX |
操作步骤:
未知
预期结果:
不崩溃
实际结果:
偶尔崩溃
bug描述:
经常有用户反映APP闪退,我这边集成了bugly,发现有这个报错日志,bugly报错具体信息发在下边
main(1)
java.util.ConcurrentModificationException
解析原始
- java.lang.RuntimeException:Unable to destroy activity {com.jiaruixx.www/io.dcloud.PandoraEntryActivity}: java.util.ConcurrentModificationException
- android.app.ActivityThread.performDestroyActivity(ActivityThread.java:6801)
- …
- Caused by:
- java.util.ConcurrentModificationException:
- java.util.HashMap$HashIterator.nextNode(HashMap.java:1454)
- java.util.HashMap$ValueIterator.next(HashMap.java:1483)
- io.dcloud.common.DHInterface.message.ActionBus.sendToBus(Unknown Source:7)
- io.dcloud.WebAppActivity.onDestroy(Unknown Source:1)
- android.app.Activity.performDestroy(Activity.java:8875)
- android.app.Instrumentation.callActivityOnDestroy(Instrumentation.java:1379)
- android.app.ActivityThread.performDestroyActivity(ActivityThread.java:6788)
- android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:6847)
- android.app.servertransaction.DestroyActivityItem.execute(DestroyActivityItem.java:57)
- android.app.servertransaction.ActivityTransactionItem.execute(ActivityTransactionItem.java:50)
- android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:190)
- android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:105)
- android.app.ActivityThread$H.handleMessage(ActivityThread.java:3059)
- android.os.Handler.dispatchMessage(Handler.java:117)
- android.os.Looper.loopOnce(Looper.java:205)
- android.os.Looper.loop(Looper.java:293)
- android.app.ActivityThread.loopProcess(ActivityThread.java:9934)
- android.app.ActivityThread.main(ActivityThread.java:9923)
- java.lang.reflect.Method.invoke(Native Method)
- com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:586)
- com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1240)
更多关于uni-app APP频繁闪退 报java.util.ConcurrentModificationException错误 日志显示通过bugly集成发现的实战教程也可以访问 https://www.itying.com/category-93-b0.html
你是使用 HBuilder x 4.15 出现的问题嘛。
更多关于uni-app APP频繁闪退 报java.util.ConcurrentModificationException错误 日志显示通过bugly集成发现的实战教程也可以访问 https://www.itying.com/category-93-b0.html
俺也一样 问题Trace: java.lang.RuntimeException: Unable todestroy activity icom.iunxinsiyi.fours/io.dcloud.PandoraEntryActivity}: iava.util.ConcurrentModificationExceptionat android.app.ActivityThread.performDestroyActivity(ActivityThread.java:5714)at android.app.ActivityThread.handleDestroyActivity(ActivityThread.iava:5754)at android.app.servertransaction.DestroyActivityltem.execute(DestroyActivityltem.java:47)
我也发生了这个问题
问题Trace:
java.lang.RuntimeException: Unable todestroy activity icom.iunxinsiyi.fours/io.dcloud.PandoraEntryActivity}: iava.util.ConcurrentModificationExceptionat
android.app.ActivityThread.performDestroyActivity(ActivityThread.java:5714)at
android.app.ActivityThread.handleDestroyActivity(ActivityThread.iava:5754)at
android.app.servertransaction.DestroyActivityltem.execute(DestroyActivityltem.java:47)
java.util.ConcurrentModificationException 是一个常见的 Java 异常,通常发生在多线程环境下,当你在遍历集合(如 List、Set、Map 等)时,同时有其他线程修改了这个集合,就会抛出这个异常。在 uni-app 开发中,如果你在原生 Android 代码中使用了多线程操作集合,或者在某些情况下集合被意外修改,可能会导致这个问题。
可能的原因
- 多线程操作集合:如果你在多个线程中同时操作同一个集合(例如添加、删除元素),而没有进行适当的同步,就可能导致
ConcurrentModificationException。 - 异步操作:在 uni-app 中,如果你使用了异步操作(如
setTimeout、Promise、async/await等)来修改集合,可能会导致在遍历集合时,集合被修改。 - 第三方库或插件:如果你使用了某些第三方库或插件,这些库或插件可能在后台线程中修改了集合,导致主线程在遍历时抛出异常。
- Bugly 集成问题:Bugly 是一个崩溃监控工具,它可能会在后台线程中收集日志或执行其他操作,如果这些操作涉及到集合的修改,可能会导致异常。
解决方案
-
使用线程安全的集合:
- 如果你需要在多线程环境下操作集合,可以使用
java.util.concurrent包下的线程安全集合,如CopyOnWriteArrayList、ConcurrentHashMap等。
List<String> list = new CopyOnWriteArrayList<>(); - 如果你需要在多线程环境下操作集合,可以使用
-
同步访问集合:
- 如果你必须使用非线程安全的集合,确保在访问集合时进行同步操作,使用
synchronized关键字或ReentrantLock。
synchronized (list) { // 操作集合 } - 如果你必须使用非线程安全的集合,确保在访问集合时进行同步操作,使用
-
避免在遍历时修改集合:
- 如果你在遍历集合时需要修改它,可以使用迭代器的
remove方法,或者使用一个临时集合来存储需要修改的元素,遍历完成后再进行批量修改。
Iterator<String> iterator = list.iterator(); while (iterator.hasNext()) { String item = iterator.next(); if (condition) { iterator.remove(); } } - 如果你在遍历集合时需要修改它,可以使用迭代器的

