我的应用只有一项活动。
当我启动Google-Play排行榜(这是一项单独的活动)然后返回我应用的主要活动时,整个过程暂停(有时持续4或5秒),然后才能恢复正常服务恢复。
过去5个小时我一直在搜索高低,但我无法理解为什么会发生这种情况。
在我的应用程序活动中,我使用自定义场景管理器,因此使用可以从一个场景中导航'当我从其他任何场景返回主菜单时,一切都是瞬间完成的(有些模拟'单独的活动)。从外部活动(我的游戏服务排行榜)返回时,我只会遇到此问题。
这是我的排行榜代码:
非常感谢任何人都可以提供的任何指示。
if (scoresButtonPresses){
displayLeaderBoard();
}
void displayLeaderBoard(){
//Display the leaderboard if already signed in
if (checkSignedIn()){
startActivityForResult(Games.Leaderboards.getLeaderboardIntent(getApiClient(), leaderboardID), 1);
}
//if not already connected, then set flag and connect to play services before displaying leaderbaord
else{
signInAction=SHOW_LEADERBOARD;
getGameHelper().beginUserInitiatedSignIn();
}
}
@Override
public void onSignInSucceeded() {
//If the flag is set, then display the leaderboard
if (signInAction==DISPLAY_LEADERBOARD){
startActivityForResult(Games.Leaderboards.getLeaderboardIntent(getApiClient(), leaderboardID), 1);
}
//Otherwise, reset the flag and take no action
else {signInAction=NO_ACTION;}
}
修改
我想我已经解决了问题所在,但我需要知道如何阻止它发生。
因此,在我的 onSurfaceCreated()方法中,我正在加载所有位图并设置纹理,如下所示:
atlas= BitmapFactory.decodeResource(view.getResources(), R.drawable.mainatlas, BMFOptions);
然后我将其设置为这样的纹理(setTexture是我的自定义Quad类中的一个方法:
sprite1.setTexture(view, atlas);
我随后回收图片,因为它不再需要....
atlas1.recycle();
因此,发生的事情是,当我从排行榜活动返回到我的主要游戏活动时,它再次调用onSurfaceCreated(),暂停是因为它重新加载所有图形/纹理。不幸的是,这是一个要求,因为这是一个openGL应用程序,并且建议在此处加载纹理,以免GL上下文丢失。
我不确定的是,我的GL背景真的丢失了吗?只是通过启动排行榜活动并立即回到它的父母活动?如果不是,我有什么方法可以检查它是否已经丢失,如果它没有,那么就跳过所有加载?
我在某处读到,如果onSurfaceCreated被调用,则表示其中任意一个方向已经改变(当我的应用程序被锁定为横向时它没有改变),或者GLContext已经丢失。它是否正确?如果是这样,我怎样才能在重新加载所有纹理时处理这个暂停?!
答案 0 :(得分:0)
启用GameHelper的调试日志:
getGameHelper().enableDebugLog(true);
这将为您提供有关Google服务正在执行的操作的更多信息,然后查看LogCat的时间间隔,该时间间隔应指示其挂起的位置。
从排行榜回来时调用的唯一方法应该是onResume()和onActivityResult()。将这些方法发布在此处以及调试LogCat可能会有所帮助。
Zippy:嗨@BrianDeWolff,谢谢。我想我已经发现了问题所在,因为我怀疑它是排行榜活动与问题无关,请在我的问题中查看我的编辑。这是因为在我的onSurfaceChanged()方法中(重新)加载了纹理。如果您有任何建议,将不胜感激。谢谢! : - )
BrianDeWolff:这是有道理的。我没有与GL合作的经验,但这似乎是一个非常普遍的抱怨/问题。例如:https://gamedev.stackexchange.com/questions/12629/workaround-to-losing-the-opengl-context-when-android-pauses