安卓onResume黑屏问题;Activity生命周期求解!

问题:目前引擎在Activity的onPause时调用Cocos2dxHelper.onPause()和 mGLSurfaceView.onPause()暂停渲染,在onResume时恢复。这样遇到一个问题,当弹出权限权限申请对话窗口或其它第三方SDK界面时,如果切换到后台再切回来,游戏会黑屏。

=========================================

通过Log研究activity各生命周期函数的调用顺序:

1.正常情况下切换后台、前台,activity各生命周期函数的调用顺序是:
前台到后台:onPause -> onStop
后台到前台:onRestart -> onStart -> onResume

2.当弹出权限权限申请对话窗口或有其它sdk界面存在时(其余activity):
前台到后台:onStop
后台到前台:onRestart -> onStart

=========================================

为解决这个问题,我把暂停和恢复渲染的逻辑移动到生命周期的onStop和onStart函数中(Cocos2dxActivity.java):
1.注释掉原来onPausu和onResume中相关的逻辑:

@Override
protected void onPause() {
    Log.d(TAG, "onPause()");
    super.onPause();
    //Cocos2dxAudioFocusManager.unregisterAudioFocusListener(this);  //!@
    //Cocos2dxHelper.onPause();
    //mGLSurfaceView.onPause();
}

@Override
protected void onResume() {
    Log.d(TAG, "onResume()");
    super.onResume();
    //Cocos2dxAudioFocusManager.registerAudioFocusListener(this);  //!@ 进游戏不关闭后台音乐
    //this.hideVirtualButton();
    //resumeIfHasFocus();
}

2.在onStop和onStart中添加原来的逻辑

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

    //注意,这个时候activity没有获得焦点,所以不用原来的resumeIfHasFocus()方法,直接执行相关功能逻辑
    this.hideVirtualButton();
    Cocos2dxHelper.onResume();
    mGLSurfaceView.onResume();
}

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

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

=========================================

这样修改后,目前测试能解决黑屏问题,游戏运行各方面【似乎】也都正常,但个人对Activity的生命周期理解还不是很深入,请问大佬们:

这样做有什么潜在的危险吗?

跪求解答~~

哇哇哇 我也遇到这个问题了 拉起 sdk 后 , 且后台 回来 就会黑屏 , 怎么解决啊。:sweat:

论坛还有其它人发了解决方案,你搜索下;至于我写的这个,简单测试也是可以修复,潜在危险未知。。。

这个问题我在论坛反映过多次了,
就是 因为没获得焦点.resumeIfHasFocus() 中的代码有些代码没走到