首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IndexOutOfBoundsException in ViewTreeObserver

IndexOutOfBoundsException in ViewTreeObserver
EN

Stack Overflow用户
提问于 2021-06-03 12:44:16
回答 1查看 145关注 0票数 3

几个月以来,我在Crashlytics和Google控制台上体验了IndexOutOfBoundsException。由于堆栈跟踪只列出了框架代码(请参阅下面的堆栈跟踪),因此我无法确定具体发生在何处。

从火基事件中,我猜它发生在广告显示时(它总是发生在一个级别结束时,也就是我显示广告的地方)。

我使用AdMob作为中介网络,包括AdMob、。我有很多这样的崩溃,这种情况发生在几种运行各种Android版本的设备上。由于它已经发生了很长时间,我怀疑它是否与API版本有任何关系,因为自从第一次出现以来,我已经对它们进行了多次更新。

有没有人经历过同样的问题并能够解决它?

这就是堆叠痕迹:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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'
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-12 16:41:00

经过几天的调查,并向Crashlytics添加了大量的调试日志,我终于找到了这次崩溃的原因。

在我的例子中,这是由Google游戏引起的。我接到一个电话:

代码语言:javascript
复制
Games.getGamesClient(context, account).setViewForPopups(gameContentView);

随后显示了一个“加载”Dialog,它在屏幕上停留了大约2秒。

在一些罕见的情况下,我猜想游戏库(异步)执行的onGlobalLayoutListener添加或删除与由Android管理Dialog触发的类似操作同时发生,最终导致崩溃。

修正:我将对setViewForPopups()的调用转移到另一个地方,在那里并发UI更改非常不可能发生。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67821711

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档