场景描述:

复现大概是这样:

转载 - cocos 游戏跳转到其他 activity,返回之后显示黑屏_生命周期

曾多次尝试运行游戏寻找原因,未果。猝。 某次不经意的发现正常情况和异常情况下所执行的 ​​activity 生命周期不一致​​,于是集中注意观察生命周期执行情况,如下所示:

2021-08-19 14:12:32.205 24566-24566/【包名】 D/HsLog: cocos - oncreate
2021-08-19 14:12:32.207 24566-24566/【包名】 D/HsLog: cocos - onstart
2021-08-19 14:12:32.207 24566-24566/【包名】 D/Cocos2dxActivity: onResume()
2021-08-19 14:12:32.259 24566-24566/【包名】 D/HsLog: cocos - onresume
2021-08-19 14:12:32.290 24566-24877/【包名】 D/main: cocos_android_app_init
2021-08-19 14:12:32.308 24566-24566/【包名】 D/Cocos2dxActivity: onWindowFocusChanged() hasFocus=true

2、弹出广告
2021-08-19 14:13:39.994 24566-24566/【包名】 D/Cocos2dxActivity: onPause()
2021-08-19 14:13:40.045 24566-24566/【包名】 D/HsLog: cocos - onpause
2021-08-19 14:13:40.257 24566-24566/【包名】 D/Cocos2dxActivity: onWindowFocusChanged() hasFocus=false

3、跳出游戏界面
2021-08-19 14:13:48.316 24566-24566/【包名】 D/HsLog: cocos - onstop
2021-08-19 14:13:48.317 24566-24566/【包名】 D/HsLog: cocos - onsaveinstance

4、回到游戏(显示异常,游戏出现黑情况)
2021-08-19 14:14:13.082 24566-24566/【包名】 D/HsLog: cocos - onrestart
2021-08-19 14:14:13.083 24566-24566/【包名】 D/HsLog: cocos - onstart

5、游戏正常
2021-08-19 14:14:36.778 24566-24566/【包名】 D/Cocos2dxActivity: onResume()
2021-08-19 14:14:36.822 24566-24566/【包名】 D/HsLog: cocos - onresume
2021-08-19 14:14:36.825 24566-24566/【包名】 D/Cocos2dxActivity: onWindowFocusChanged() hasFocus=true

6、激励视频显示正常
2021-08-19 14:16:00.781 24566-24566/【包名】 D/HsLog: cocos - onrestart
2021-08-19 14:16:00.782 24566-24566/【包名】 D/HsLog: cocos - onstart
2021-08-19 14:16:00.782 24566-24566/【包名】 D/Cocos2dxActivity: onResume()
2021-08-19 14:16:00.826 24566-24566/【包名】 D/HsLog: cocos - onresume
2021-08-19 14:16:00.848 24566-24566/【包名】 D/Cocos2dxActivity: onWindowFocusChanged() hasFocus=true

7、全屏视频显示正常
2021-08-19 14:17:28.423 24566-24566/【包名】 D/HsLog: cocos - onrestart
2021-08-19 14:17:28.424 24566-24566/【包名】 D/HsLog: cocos - onstart
2021-08-19 14:17:28.424 24566-24566/【包名】 D/Cocos2dxActivity: onResume()
2021-08-19 14:17:28.468 24566-24566/【包名】 D/HsLog: cocos - onresume
2021-08-19 14:17:28.491 24566-24566/【包名】 D/Cocos2dxActivity: onWindowFocusChanged() hasFocus=true

日志分析:
​​​1、5、6、7 均执行了 onResume 回调,异常情况下的第 4 步没有指向 onResume,可疑。​

下一步:
去 cocos 论坛查找 activity 生命周期对 cocos 游戏绘制(渲染)存在什么关联???
之后就发现了下面的这篇原文(第一次接触 cocos ,知识盲区)

解决

  • 找到文件 ​​Cocos2dxActivity​
  • 重写生命周期,提前 cocos 绘制
@Override
protected void onStart() {
super.onStart();

Cocos2dxHelper.onResume();
mGLSurfaceView.onResume();
}

@Override
protected void onStop() {
super.onStop();

Cocos2dxHelper.onPause();
mGLSurfaceView.onPause();
}