2.X版本游戏切到后台后引擎逻辑貌似依然在执行,各种定时器能正常工作,比如websoket的心跳保持就没问题。3.X版本后,切后台后逻辑完全停止,导致返回前台时定时器已经停止了,websoket断线
导致用户看完广告视频无法通知服务器发放奖励。3.4.1版本日志中说调整为切后台后主逻辑依然执行,但是还是有一些问题,下面是测试结果:
3.4.0和更早版本:
安卓原生:切到桌面,返回游戏WEBSOKET掉线
IOS原生:切到桌面,返回游戏WEBSOKET掉线
微信等小游戏平台:按关闭按钮或者切到桌面,返回游戏WEBSOKET掉线
3.4.1社区win32-010808版本:
安卓原生:切后台返回websoket并未断开,但是有一些问题,详见下面详解!
IOS原生:切后台返回websoket并未断开,立即调用网络请求服务器发放看视频奖励,一切正常
微信等小游戏平台:按关闭按钮或者切到桌面,返回游戏WEBSOKET掉线
341版本安卓原生返回游戏后,监听返回游戏game.on(Game.EVENT_SHOW, this.onEventShow)和隐藏game.on(Game.EVENT_HIDE, this.onEventHide)两个事件,如果在EVENT_SHOW事件前执行任何逻辑就会导致黑屏或者部分画面贴图变成黑块。如果在EVENT_SHOW之后执行也有一定概率会这样,越高端的机器越好。低端机器感觉可能是处理太慢也有一定概率黑屏。我们加了一个定时器,在2秒后让JAVA层通知JS层调用网络发奖励。但是这个2秒也只是个权宜之计,可能更低端的机器反应更慢2秒也不够。
以上是高端机器的表现,如果使用低端机器(我的两个测试机是oppo a5 oppo r9),返回游戏不管什么时机调用WEBSOKET,直接黑屏,LOGCAT里疯狂刷报错D/WebSocket.cpp: ERR: internal signal handler caught signal 11
综上所述,一个简单的引擎切到后台和返回,2.X版本从来没操心过这个问题。3.X现在很混乱,导致一个最常见的看视频后联网发奖励的需求变得难搞。另外备注下,安卓原生广告SDK使用的是穿山甲,微信小游戏使用是官方的广告视频组件