Android实时多人游戏:onRoomCreated变得不稳定STATUS_NETWORK_ERROR_NO_DATA

时间:2016-02-08 16:55:29

标签: android android-googleapiclient

问题:onRoomCreated在5%的时间内返回STATUS_NETWORK_ERROR_NO_DATA,我们无缘无故。

该游戏在大约16个月的开发中运行良好(在清单或Google Play控制台中没有丢失“权限”的问题)但是从Google Play服务29开始(这是“据称”......它可能无关) ,这种不可预知的行为开始了,它阻止了任何进一步创建房间的尝试(即使在重新开始游戏后,同样的错误状态码再次出现)。

让它再次运作的唯一方法是在10-15分钟后重启游戏或重启设备(通常可以工作但不总是)。

问题在3个不同的设备上是相同的(这里没有模拟器)。

我们发现这个问题(在SO和其他地方)是因为在尝试创建一个新问题之前它可能与不离开房间(RealTimeMultiplayer.leave(...))有关。因此,在尝试创建新房间之前,我们至少等待“onLeftRoom”的结束(加上3秒,以防万一)。无济于事。

显然我们遵循建议的准则:在onCreate中实例化GoogleApiClient,在onStart中实例化.connect,在onStop中实例化.disconnect(即使.connect正在运行中)...

另请注意,因为它应该是“NETWORK_ERROR”,所以我们在每次尝试创建房间之前验证Internet连接(使用ping)。

如果您有关于此问题的任何信息,或者如果您知道如何让Google Play在此状态之后创建一个房间而不重新启动设备,请告知我们,因为在此之前我们的发布日期将永远推迟。非常感谢。

1 个答案:

答案 0 :(得分:1)

[更新2]:应用程序被重写以停止自动化房间创建(因此请求频率较低),并且......没有...仍然是相同的错误/问题/你的名字 - 它......一遍又一遍...然后Google Play更新了应用程序“Google Play游戏”(也许是“服务”)并且它有点工作:2周内只有一个STATUS_NETWORK_ERROR_NO_DATA ...现在我要睡2个月因为我[删除]。

[更新]:根据this post,STATUS_NETWORK_ERROR_NO_DATA用于限制请求的频率。因为我们自动化房间创作和关闭,这可能是最终的答案。当它验证或不验证时我会再次更新。 我留下这个答案的其余部分是因为,虽然它没有直接关系,但不是关闭房间也会导致错误。[更新结束]

以下是这种不可预测的行为的答案(不是来自SO,但有些人可能仍然感兴趣):在“onStart”和“onStop”中,所有对Google Play服务的调用/请求(使用mGoogleApiClient)必须在“super.onStart();”之前制作和“super.onStop();”。

否则“super.onStop();”之后会出现什么在它结束之前会被中断(通过设备的速度和负载添加一些随机性),这意味着对“.leave”打开房间的任何调用都将失败,然后阻止创建新房间(因此STATUS_NETWORK_ERROR_NO_DATA错误)。

另请注意,变量mGoogleApiClient不应声明为静态,并记得调用“mGoogleApiClient.disconnect();”在“onStop”中(例如“ButtonClicker”在其他地方推荐时不会这样做。)