OnResume 快速连续调用

OnResume called in quick succession

提问人:Ray 提问时间:11/14/2023 更新时间:11/14/2023 访问量:30

问:

我的应用程序在生产环境中发生崩溃,原因是由于 java.util.ConcurrentModificationException。

在崩溃日志的 Breadcrump 中,我注意到活动的 onResume 被快速连续调用两次(在几十秒内或最多大约 300 毫秒),比如 onResume->onPause->onResume。我的应用程序在 onResume 中使用 IO 调度程序启动一个协程,这个协程在一个列表上运行,当快速连续调用 onResume 时,启动了 2 个线程,它们访问同一个列表,导致崩溃。

有人知道什么时候可以如此快速地连续调用onResume吗?用户不太可能如此迅速地做到这一点。我确实注意到在许多情况下,崩溃发生在屏幕唤醒时,但不是全部。

android android-activity kotlin-协程 android-lifecycle

评论

2赞 Marko Topolnik 11/14/2023
在多线程调度程序(如 IO)中运行的所有代码都应该是线程安全的。我的建议是,不要试图寻找和修复生命周期方法时间的原因,而是要解决你的数据竞争问题。
0赞 Rob 11/17/2023
@Ray 假设首先 onResume() 被按应有的方式调用,然后发生崩溃,实际上在您的应用程序上方显示一个透明的活动,并带有小对话框“应用程序已停止”文本,该文本调用了 onPause(),然后可能它被返回到您的应用程序并再次调用 onResume()

答: 暂无答案