Android解决Unity游戏从后台返回黑屏问题

一、 问题现象
当有其他Activity在Unity所在的Activity之上的时候,Unity游戏从后台返回到游戏时,会出现黑屏的现象,比如:
正常时:
在这里插入图片描述
从后台返回时:
在这里插入图片描述

二、 问题分析
1)当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

2)当Unity所在的Activity之上有其他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

3)对比两次的日志打印,我们可以发现:第二次从后台返回少了两个生命周期的调用

D/MainActivity: onResume
D/MainActivity: onWindowFocusChanged true

4)综上分析所得,要想做到从后台返回不黑屏,要么游戏自己得去处理好,从后台返回时,游戏内容的恢复;要么就是在Android层面上,手动加调用onResume,onWindowFocusChanged
三、 解决方案
在这里插入图片描述
对Unity提供的class.jar进行反编译,然后在UnityPlayerActivity类中的onStart方法中增加调用onResume,onWindowFocusChanged,经测试,确实是解决了黑屏的问题。不过最好的解决方法还是游戏方去处理,这个会影响到unity的正常生命

public void onStart() {
    super.onStart();
    this.mUnityPlayer.resume();
    onWindowFocusChanged(true);
}
发布了36 篇原创文章 · 获赞 9 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_43278826/article/details/98625691