几个月以来,我在Crashlytics和Google控制台上体验了IndexOutOfBoundsException。由于堆栈跟踪只列出了框架代码(请参阅下面的堆栈跟踪),因此我无法确定具体发生在何处。
从火基事件中,我猜它发生在广告显示时(它总是发生在一个级别结束时,也就是我显示广告的地方)。
我使用AdMob作为中介网络,包括AdMob、。我有很多这样的崩溃,这种情况发生在几种运行各种Android版本的设备上。由于它已经发生了很长时间,我怀疑它是否与API版本有任何关系,因为自从第一次出现以来,我已经对它们进行了多次更新。
有没有人经历过同样的问题并能够解决它?
这就是堆叠痕迹:
java.util.ArrayList.get (ArrayList.java:437)
android.view.ViewTreeObserver$CopyOnWriteArray$Access.get (ViewTreeObserver.java:1267)
android.view.ViewTreeObserver.dispatchOnGlobalLayout (ViewTreeObserver.java:1056)
android.view.ViewRootImpl.performTraversals (ViewRootImpl.java:2823)
android.view.ViewRootImpl.doTraversal (ViewRootImpl.java:1857)
android.view.ViewRootImpl$TraversalRunnable.run (ViewRootImpl.java:8089)
android.view.Choreographer$CallbackRecord.run (Choreographer.java:1057)
android.view.Choreographer.doCallbacks (Choreographer.java:875)
android.view.Choreographer.doFrame (Choreographer.java:776)
android.view.Choreographer$FrameDisplayEventReceiver.run (Choreographer.java:1042)
android.os.Handler.handleCallback (Handler.java:888)
android.os.Handler.dispatchMessage (Handler.java:100)
android.os.Looper.loop (Looper.java:213)
android.app.ActivityThread.main (ActivityThread.java:8178)
java.lang.reflect.Method.invoke (Method.java)
com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:513)
com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1101)这些是我的应用程序包含的app:
implementation 'androidx.multidex:multidex:2.0.1'
implementation 'androidx.core:core:1.5.0'
implementation 'androidx.lifecycle:lifecycle-viewmodel:2.3.1'
implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
implementation 'androidx.appcompat:appcompat:1.3.0'
implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
implementation 'com.google.android.material:material:1.3.0'
implementation 'com.android.billingclient:billing:4.0.0'
implementation 'com.google.android.gms:play-services-base:17.6.0'
implementation 'com.google.android.gms:play-services-basement:17.6.0'
implementation 'com.google.android.gms:play-services-games:21.0.0'
implementation 'com.google.android.gms:play-services-auth:19.0.0'
implementation 'androidx.room:room-runtime:2.3.0'
implementation 'androidx.lifecycle:lifecycle-process:2.3.1'
implementation 'com.google.code.gson:gson:2.8.6'
// Monetarization
implementation 'com.google.android.gms:play-services-ads:20.1.0'
implementation 'com.google.android.gms:play-services-ads-identifier:17.0.1'
// Ad mediation
implementation 'com.google.android.ads.consent:consent-library:1.0.8'
implementation 'com.google.ads.mediation:unity:3.6.0.0'
implementation 'com.google.ads.mediation:facebook:6.4.0.0'
// Firebase
implementation 'com.google.firebase:firebase-analytics:19.0.0'
implementation 'com.google.firebase:firebase-ads:20.1.0'
implementation 'com.google.firebase:firebase-core:19.0.0'
implementation 'com.google.firebase:firebase-auth:21.0.1'
implementation 'com.google.firebase:firebase-appindexing:20.0.0'
implementation 'com.google.firebase:firebase-crashlytics:18.0.0'
implementation 'com.google.firebase:firebase-config:21.0.0'
// Dagger
implementation 'com.google.dagger:dagger-android:2.35.1'
implementation 'com.google.dagger:dagger-android-support:2.33'发布于 2022-10-12 16:41:00
经过几天的调查,并向Crashlytics添加了大量的调试日志,我终于找到了这次崩溃的原因。
在我的例子中,这是由Google游戏引起的。我接到一个电话:
Games.getGamesClient(context, account).setViewForPopups(gameContentView);随后显示了一个“加载”Dialog,它在屏幕上停留了大约2秒。
在一些罕见的情况下,我猜想游戏库(异步)执行的onGlobalLayoutListener添加或删除与由Android管理Dialog触发的类似操作同时发生,最终导致崩溃。
修正:我将对setViewForPopups()的调用转移到另一个地方,在那里并发UI更改非常不可能发生。
https://stackoverflow.com/questions/67821711
复制相似问题