Android.onCreate (com.google.android.measurement.internal) 中的 ConcurrentModificationException

ConcurrentModificationException in Android.onCreate (com.google.android.measurement.internal)

最近的崩溃开始发生在各个设备制造商的每个 Android 版本上。我相信它与广告或 Google 的组件之一有关。

我在这里自己开了一个issue:https://issuetracker.google.com/issues/149665852

设备相关信息(2k用户中43个用户48个异常,3天内发生)

堆栈跟踪(包名因保密原因隐藏):

Caused by java.util.ConcurrentModificationException
       at androidx.collection.SimpleArrayMap.put + 461(SimpleArrayMap.java:461)
       at com.google.android.gms.measurement.internal.zzin.zza + 108(zzin.java:108)
       at com.google.android.gms.measurement.internal.zzid.onActivityCreated + 11(zzid.java:11)
       at android.app.Application.dispatchActivityCreated + 189(Application.java:189)
       at android.app.Activity.onCreate + 962(Activity.java:962)
       at androidx.core.app.ComponentActivity.onCreate + 81(ComponentActivity.java:81)
       at androidx.activity.ComponentActivity.onCreate + 149(ComponentActivity.java:149)
       at androidx.fragment.app.FragmentActivity.onCreate + 313(FragmentActivity.java:313)
       at androidx.appcompat.app.AppCompatActivity.onCreate + 106(AppCompatActivity.java:106)
       at com.example.myapp.MainActivity.onCreate + 35(MainActivity.java:35)
       at android.app.Activity.performCreate + 6147(Activity.java:6147)
       at android.app.Instrumentation.callActivityOnCreate + 1112(Instrumentation.java:1112)
       at android.app.ActivityThread.performLaunchActivity + 2498(ActivityThread.java:2498)
       at android.app.ActivityThread.handleLaunchActivity + 2625(ActivityThread.java:2625)
       at android.app.ActivityThread.access0 + 183(ActivityThread.java:183)
       at android.app.ActivityThread$H.handleMessage + 1484(ActivityThread.java:1484)
       at android.os.Handler.dispatchMessage + 111(Handler.java:111)
       at android.os.Looper.loop + 194(Looper.java:194)
       at android.app.ActivityThread.main + 5667(ActivityThread.java:5667)
       at java.lang.reflect.Method.invoke(Method.java)
       at java.lang.reflect.Method.invoke + 372(Method.java:372)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run + 962(ZygoteInit.java:962)
       at com.android.internal.os.ZygoteInit.main + 757(ZygoteInit.java:757)

关于异常的知识:如果一个函数试图修改一个列表,而另一个函数正在迭代它,就会发生这种情况。所以我猜这是两个线程或更多线程之间的竞争条件。

更多详情:

首先,我们不使用任何SimpleArrayMap。所以我确信异常与我们的代码没有任何关系。

调用com.example.myapp.MainActivity.onCreate + 35(MainActivity.java:35)这一行指向:

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState); // stack trace points here

    // rest of the code
}

堆栈跟踪指向 onCreate 但实际负责人在这里(在堆栈跟踪的顶部):

at androidx.collection.SimpleArrayMap.put + 461(SimpleArrayMap.java:461)
at com.google.android.gms.measurement.internal.zzin.zza + 108(zzin.java:108)
at com.google.android.gms.measurement.internal.zzid.onActivityCreated + 11(zzid.java:11)

现在,一些细节:此应用程序使用 Firebase Analytics、AdMob 和各种广告网络,如 AppLovin、Ironsource 等...以及应用计费。我不确定 com.google.android.gms.measurement 到底是什么,但异常的来源似乎来自那里。

据我了解,此组件附加了一个对象,该对象使用 Application.registerActivityLifecycleCallbacks 通过 this 拦截 activity 个生命周期。现在,大多数库都这样做,但我们使用的 none 会导致这样的异常。所以,我不确定如何拦截并继续使用它,因为我担心将其包装到 try-catch 看起来不太好 "solution"。我什至不确定它是否会解决这个问题,因为我认为在那之后会发生另一个异常,例如 You must call Activity.onCreate().

我很困惑,除了在这里问,我不知道该怎么办。我发现的最接近的东西是 this 但也没有答案。

如果有帮助,这是我们使用的依赖项。 (我们的 build.gradle 文件)

implementation fileTree(dir: 'libs', include: '*.aar')
implementation 'com.google.firebase:firebase-core:17.2.1'
implementation 'com.google.firebase:firebase-config:19.1.1'
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.browser:browser:1.2.0'
implementation 'androidx.legacy:legacy-support-v13:1.0.0'
implementation 'com.google.android.material:material:1.2.0-alpha03'
implementation 'androidx.cardview:cardview:1.0.0'
implementation 'androidx.recyclerview:recyclerview:1.1.0'
implementation 'androidx.annotation:annotation:1.1.0'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'androidx.constraintlayout:constraintlayout:2.0.0-beta3'
implementation 'androidx.preference:preference:1.1.0'
implementation 'com.facebook.stetho:stetho:1.5.0'
implementation 'com.google.android.gms:play-services-base:17.1.0'
implementation 'com.airbnb.android:lottie:3.0.7'
implementation 'com.google.android.play:core:1.6.4'
implementation 'com.github.anrwatchdog:anrwatchdog:1.4.0'
implementation 'com.github.bumptech.glide:glide:4.9.0'
implementation 'com.google.android.gms:play-services-ads:18.3.0'
implementation 'com.google.android.ads:mediation-test-suite:1.2.2'
implementation 'com.squareup.retrofit2:retrofit:2.6.0'
implementation 'com.squareup.retrofit2:converter-gson:2.6.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.9.0'
implementation 'com.google.ads.mediation:applovin:9.8.0.0'
implementation 'com.google.ads.mediation:facebook:5.6.0.0'
implementation 'com.mopub.volley:mopub-volley:2.1.0'
implementation('com.mopub:mopub-sdk:5.7.0@aar') {
    transitive = true
    exclude module: 'libAvid-mopub' // To exclude AVID
    exclude module: 'moat-mobile-app-kit' // To exclude Moat
}
implementation 'com.google.ads.mediation:mopub:5.7.0.0'
implementation 'com.google.ads.mediation:inmobi:7.3.0.0'
implementation 'com.squareup.picasso:picasso:2.5.2'
implementation 'com.google.android.gms:play-services-plus:17.0.0'
implementation 'com.google.ads.mediation:tapjoy:12.3.1.0'
implementation 'com.unity3d.ads:unity-ads:3.1.0'
implementation 'com.google.ads.mediation:unity:3.1.0.0'

感谢任何帮助,非常感谢。

最近的 Firebase Analytics 库 17.2.2 导致了我的问题。如果您使用的是 Firebase Analytics,则需要恢复到旧版本的 Firebase Analytics,例如 17.2.1 将解决此问题。

更新:Firebase 似乎在他们的 17.2.3 版本上修复了这个问题。

因为 firebase-core 库。

更新你的

'com.google.firebase:firebase-core:17.2.1'

'com.google.firebase:firebase-core:17.2.3'

变更日志:https://firebase.google.com/support/release-notes/android#analytics_v17-2-3