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  
解析原始
  1. java.lang.RuntimeException:Unable to destroy activity {com.jiaruixx.www/io.dcloud.PandoraEntryActivity}: java.util.ConcurrentModificationException
  2. android.app.ActivityThread.performDestroyActivity(ActivityThread.java:6801)
  3. Caused by:
  4. java.util.ConcurrentModificationException:
  5. java.util.HashMap$HashIterator.nextNode(HashMap.java:1454)
  6. java.util.HashMap$ValueIterator.next(HashMap.java:1483)
  7. io.dcloud.common.DHInterface.message.ActionBus.sendToBus(Unknown Source:7)
  8. io.dcloud.WebAppActivity.onDestroy(Unknown Source:1)
  9. android.app.Activity.performDestroy(Activity.java:8875)
  10. android.app.Instrumentation.callActivityOnDestroy(Instrumentation.java:1379)
  11. android.app.ActivityThread.performDestroyActivity(ActivityThread.java:6788)
  12. android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:6847)
  13. android.app.servertransaction.DestroyActivityItem.execute(DestroyActivityItem.java:57)
  14. android.app.servertransaction.ActivityTransactionItem.execute(ActivityTransactionItem.java:50)
  15. android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:190)
  16. android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:105)
  17. android.app.ActivityThread$H.handleMessage(ActivityThread.java:3059)
  18. android.os.Handler.dispatchMessage(Handler.java:117)
  19. android.os.Looper.loopOnce(Looper.java:205)
  20. android.os.Looper.loop(Looper.java:293)
  21. android.app.ActivityThread.loopProcess(ActivityThread.java:9934)
  22. android.app.ActivityThread.main(ActivityThread.java:9923)
  23. java.lang.reflect.Method.invoke(Native Method)
  24. com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:586)
  25. com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1240)

更多关于uni-app APP频繁闪退 报java.util.ConcurrentModificationException错误 日志显示通过bugly集成发现的实战教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复

你是使用 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 异常,通常发生在多线程环境下,当你在遍历集合(如 ListSetMap 等)时,同时有其他线程修改了这个集合,就会抛出这个异常。在 uni-app 开发中,如果你在原生 Android 代码中使用了多线程操作集合,或者在某些情况下集合被意外修改,可能会导致这个问题。

可能的原因

  1. 多线程操作集合:如果你在多个线程中同时操作同一个集合(例如添加、删除元素),而没有进行适当的同步,就可能导致 ConcurrentModificationException
  2. 异步操作:在 uni-app 中,如果你使用了异步操作(如 setTimeoutPromiseasync/await 等)来修改集合,可能会导致在遍历集合时,集合被修改。
  3. 第三方库或插件:如果你使用了某些第三方库或插件,这些库或插件可能在后台线程中修改了集合,导致主线程在遍历时抛出异常。
  4. Bugly 集成问题:Bugly 是一个崩溃监控工具,它可能会在后台线程中收集日志或执行其他操作,如果这些操作涉及到集合的修改,可能会导致异常。

解决方案

  1. 使用线程安全的集合

    • 如果你需要在多线程环境下操作集合,可以使用 java.util.concurrent 包下的线程安全集合,如 CopyOnWriteArrayListConcurrentHashMap 等。
    List<String> list = new CopyOnWriteArrayList<>();
    
  2. 同步访问集合

    • 如果你必须使用非线程安全的集合,确保在访问集合时进行同步操作,使用 synchronized 关键字或 ReentrantLock
    synchronized (list) {
        // 操作集合
    }
    
  3. 避免在遍历时修改集合

    • 如果你在遍历集合时需要修改它,可以使用迭代器的 remove 方法,或者使用一个临时集合来存储需要修改的元素,遍历完成后再进行批量修改。
    Iterator<String> iterator = list.iterator();
    while (iterator.hasNext()) {
        String item = iterator.next();
        if (condition) {
            iterator.remove();
        }
    }
回到顶部