请参考这个PR的修改
这个修改需要升级ndk版本到28么?
不需要,这是GameActivity内部的bug,参考PR微改下就行
好的好的 上线看情况
这个问题我提过issue,Cocos引擎v386已经解决了(无亲测,无法100%确定是否解决),简而言之就是把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
我们也遇到了这个问题,我们用3.8.3开始使用一直存在这个ANR问题,然后我们最近也更新到了3.8.6,观察了大概10天,新版本这个ANR问题没有下降,还是存在。我们也检查过了工程里的AndroidPlatform.cpp的确改成ALooper_pollOnce了。现在应该怎么解决呢,我们用的ndk是23.2,引擎3.8.6
升到3.8.6把 ALooper_pollAll 换成 ALooper_pollOnce并不能解决这个ANR
anr 概率确认没下降? 是否有可复现的demo ?
我们没升到386,我是基于373 DIY修改的,方案不是该ALooper,跟官方不一样, AGDK/GameActivity ANR Bug · Issue #17841 · cocos/cocos-engine
确认没有下降。我们是4月25号左右更新的版本,升级到了3.8.6。观察到今天了。 我们是自己的项目在谷■后台统计的,没有单独的demo。
好的,谢谢,那我们试试这个修改
想请教一下,我看了你的修改方案,想问一下这个 onPause函数除了要新增一些代码,还要把原来的 android_app_set_activity_state(ToApp(activity), APP_CMD_PAUSE);注释掉?
是的,切换到后台,AGDK会执行onPause函数,如果还设置CMD_PAUSE,后续ALooper就会处理这个pause命令,进而可能引发ANR
我的方案是将pause状态暂存到一个状态栈,等后续process_cmd执行,优先从状态栈中读取状态处理
哦,明白了
我们使用了这个方案并更新了一个版本,新版本显示这个ANR解决了。 @song2008_2001 官方3.8.6的 把 ALooper_pollAll 换成 ALooper_pollOnce 并不能解决这个ANR
ALooper_pollOnce其实是Google AGDK官方给的方案,估计他们是没怎么大范围测试
如果你方便提供ALooper_pollOnce的ANR堆栈信息截图,我去跟Google他们反馈下
大佬牛逼,我们也遇到这个问题了,打算实行您的修复方案,请问如果这样在onPause时推迟了pause的处理,是否会发生其他问题?或者有什么其他的点需要我们关注的吗?


