ANR 问题详情

Native method - com.google.androidgamesdk.GameActivity.onPauseNative

#00 pc 0x00000000000870d0 /apex/com.android.runtime/lib64/bionic/libc.so (syscall+32)
#01 pc 0x000000000008adb8 /apex/com.android.runtime/lib64/bionic/libc.so (__futex_wait_ex(void volatile*, bool, int, bool, timespec const*)+144)
此原生同步例程正阻塞主线程,进而导致 ANR

#02 pc 0x00000000000ebd70 /apex/com.android.runtime/lib64/bionic/libc.so (pthread_cond_timedwait+120)
#03 pc 0x0000000000242a30 /data/app/~~MDucxvv6ROMibouX-dvJ5A==/com.qihecm.rummy-vG_LUFBcv4enNkTEukG40Q==/split_config.arm64_v8a.apk!libcocos.so
at com.google.androidgamesdk.GameActivity.onPauseNative (Native method)
at com.google.androidgamesdk.GameActivity.onPause
at com.cocos.lib.CocosActivity.onPause
at com.cocos.game.AppActivity.onPause (AppActivity.java)
at android.app.Activity.performPause (Activity.java:8343)
at android.app.Instrumentation.callActivityOnPause (Instrumentation.java:1510)
at android.app.ActivityThread.performPauseActivityIfNeeded (ActivityThread.java:4899)
at android.app.ActivityThread.performPauseActivity (ActivityThread.java:4860)
at android.app.ActivityThread.handlePauseActivity (ActivityThread.java:4808)
at android.app.servertransaction.PauseActivityItem.execute (PauseActivityItem.java:46)
at android.app.servertransaction.TransactionExecutor.executeLifecycleState (TransactionExecutor.java:176)
at android.app.servertransaction.TransactionExecutor.execute (TransactionExecutor.java:97)
at android.app.ActivityThread$H.handleMessage (ActivityThread.java:2191)
at android.os.Handler.dispatchMessage (Handler.java:106)
at android.os.Looper.loop (Looper.java:236)
at android.app.ActivityThread.main (ActivityThread.java:8049)
at java.lang.reflect.Method.invoke (Native method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:620)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1011)

3.6.3游戏原生的com.google.androidgamesdk.GameActivity.onPauseNative崩溃!!!有谁遇到没啊?

1赞

我顶顶顶~

顶一下帖子。。。

我们的游戏也遇到了。

3.6.0也在报。

后面有遇到的用户,麻烦上传手机上/data/anr/xx.txt, 可能叫trace.txt,里面会详细记载了各个线程在出现anr时的运行状态。

同时提供出现anr的引擎版本,手机设备信息:android 操作系统版本(5-14),设备商或手机具体型号

我们也遇到了,不知道你们怎么解决的

我也出现了。好多。3.6.1

android_native_glue这个有bug

遇到过,目前我也不知道问题所在。 看线程有很多,有定位切后台的打印,目前我猜测是游戏切后台,还做了一堆的事情。

目前没有可复现的环境,猜测

  1. 用到了谷歌广告sdk,广告activity显示后,游戏会退后台
    2.游戏加载过程,场景比较大?或者资源比较多导致游戏启动过程阻塞了游戏线程

如果是游戏逻辑比较耗时,可以考虑合并这个pr,然后观察下

1赞

请参考这个PR的修改

这个修改需要升级ndk版本到28么?

不需要,这是GameActivity内部的bug,参考PR微改下就行

好的好的 上线看情况

@haroel @cleverpo 有结论麻烦反馈下,谢谢。

这个问题我提过issue,Cocos引擎v386已经解决了,简而言之就是把GameActivity的 ALooper_pollAll换成 ALooper_pollOnce

3.8.6之前的版本,可根据引擎的PR【推荐】或者参考我自己DIY的做法合并引擎就可以解决 AGDK/GameActivity ANR Bug · Issue #17841 · cocos/cocos-engine

如果对Android主循环感兴趣,可以看我给Google提的issue There is a bug in AGDK/android_native_app_glue that causes an ANR. [377940980] - Issue Tracker

1赞