我正在使用Google Play服务开发适用于Android的游戏,以创建基于回合的匹配。
起初一切都很好我使用
为已登录的用户加载了turnbased匹配Games.TurnBasedMultiplayer.loadMatchesByStatus(getApiClient(),
new int[]{TurnBasedMatch.MATCH_TURN_STATUS_MY_TURN,
TurnBasedMatch.MATCH_TURN_STATUS_THEIR_TURN,
TurnBasedMatch.MATCH_TURN_STATUS_INVITED,
TurnBasedMatch.MATCH_TURN_STATUS_COMPLETE})
.setResultCallback(this);
它总是加载任何给定状态的所有匹配。但是从上周末开始回调,但是没有匹配,因为我没有参加任何比赛(状态响应没问题)。我在手机上删除了Google Play服务的缓存,然后重新启动了该设备。在那一刻,所有比赛再次显示,直到我下次打开应用程序。所有比赛都失踪了。 一旦我开始新的比赛,比赛将继续显示上述方法(刷新列表),直到我关闭应用程序。在下一次发布时,比赛也消失了。
我不得不说游戏尚未发布,但在Google Play开发者控制台的测试阶段。我在模拟器上发现了同样的问题。它运行良好几天,但突然遇到了与我的真实设备相同的问题(后来的构建,所以不是单个代码更改导致这一点)。
是否有其他人注意到此行为或对如何解决此问题有所了解?
可能与多个应用程序连接到一个游戏有关吗?我有两个连接调试证书签名的应用程序,今天下午为签名的apk添加了一个。当我使用签名的apk时,它再次起作用,直到我部署了一个新的测试应用程序(debug signed)。切换回已签名的apk后,错误仍然存在。
由于似乎没有人知道答案让我重新解释这个问题。我应该自己在设备上缓存TurnBasedMatches吗?我刚刚删除了播放服务缓存并重新打开了我的应用程序。结果?数百个游戏的列表(因为我每次测试时都必须开始一个新游戏......)
我处理loadMatchesResult的代码
@Override
public void onResult(TurnBasedMultiplayer.LoadMatchesResult loadMatchesResult)
{
showToast("GotMatches status: " + loadMatchesResult.getStatus().getStatusCode());
//add matches to listview (only caching matchId, no references to turnbasedmatch)
loadMatchesResult.getMatches().getMyTurnMatches().close();
loadMatchesResult.getMatches().getInvitations().close();
loadMatchesResult.getMatches().getTheirTurnMatches().close();
loadMatchesResult.getMatches().getCompletedMatches().close();
loadMatchesResult.release();
}
找到了另一个兴趣点..当开始向设备部署新的apk时,它开始看起来像问题...一旦我部署新的apk(通过从谷歌播放安装alpha版本或从Android Studio直接调试版本)比赛都没了。当我没有更改apk时,我可以重新启动手机/关闭应用程序,它运行正常...
如果我通过Play商店更新应用程序也会出现问题......应该有更多人遇到此问题!
答案 0 :(得分:1)
使用await()检索结果或传递给结果回调后,尝试再次检索结果是错误的。调用者或回调接收者有责任释放与返回结果相关的任何资源。某些结果类型可能实现Releasable,在这种情况下,应使用release()来释放相关资源。
检索结果后,当您尝试再次获取结果时会出现错误,直到您释放与返回结果相关联的资源,这就是为什么清除缓存会使它们再次可见。您还需要访问设备的缓存并显示结果,或者在您想再次访问结果时清除相关资源(在程序内)。
答案 1 :(得分:0)
我遇到了同样的问题,直到找到了#34; Saved Games"在我的开发者控制台中:
这可以解决您的问题,
欢呼声, 保罗