今天发行那边反馈过来一个问题,是之前我们都没发现过的,当在安卓SDK登录界面的时候切换到后台或者切换其他到其他应用,再次返回游戏的时候,发现SDK登录界面后面的游戏界面黑屏了。
我的初步判断是,游戏的View应该是从后台返回到前台的时候还没被激活,因为只要点击一下SDK的登录,游戏界面就显示出来了。
查询资料发现确实是这个原因。
一、当Unity所在的Activity之上没有其他Activity时候,生命周期的变化如下:
启动App
D/MainActivity: onCreate
D/MainActivity: onStart
D/MainActivity: onResume
D/MainActivity: onWindowFocusChanged true
点Home进入后台
D/MainActivity: onPause
D/MainActivity: onWindowFocusChanged false
D/MainActivity: onStop
从后台回来
D/MainActivity: onRestart
D/MainActivity: onStart
D/MainActivity: onResume
D/MainActivity: onWindowFocusChanged true
退出应用
D/MainActivity: onWindowFocusChanged false
D/MainActivity: onPause
D/MainActivity: onStop
D/MainActivity: onDestroy
二、当Unity所在的Activity之上有其他Activity时候,生命周期的变化如下:
弹窗显示另外一个Activity
D/MainActivity: onPause
D/MainActivity: onWindowFocusChanged false
点Home进入后台
D/MainActivity: onStop
从后台回来
D/MainActivity: onRestart
D/MainActivity: onStart
关闭 弹窗Activity
D/MainActivity: onResume
D/MainActivity: onWindowFocusChanged true
三、对比两次的日志打印,我们可以发现:第二次从后台返回少了两个生命周期的调用
D/MainActivity: onResume
D/MainActivity: onWindowFocusChanged true
综上分析所得,要想做到从后台返回不黑屏,只需要在SDK的主Activity的 onStart里面调用onResume和onWindowFocusChanged方法即可。
public void onStart() {
super.onStart();
this.mUnityPlayer.resume();
onWindowFocusChanged(true);
}
这样当Unity所在的Activity之上有其他Activity时候,即使切换到后台再返回游戏,也不会黑屏。