我的应用程序在生产环境中发生崩溃,原因是java. util. ConcurrentModificationException。
在崩溃日志的Breadcrump中,我注意到活动的onResume被连续调用了两次(几十毫秒以内,最多300毫秒左右),比如onResume-> onResume->onResume。我的应用程序使用onResume中的IO调度器启动一个协同例程,这个协同例程对一个列表进行操作,当onResume被快速连续调用时,启动2个线程,它们访问同一个列表,导致了坠机
有谁知道onResume什么时候可以如此快速地被调用?用户不太可能这么快就能做到这一点。我确实注意到,在许多情况下,崩溃发生在屏幕唤醒时,但不是所有的情况。
1条答案
按热度按时间vnjpjtjt1#
经过一些分析,这可能是一个边缘情况,当应用调用onResume时,Activity正在激活,其他应用或对话框可以显示,然后消失,导致onResume被调用2次。我添加了代码使用synchronized来防止列表被并发访问,这修复了bug。