Таблица лидеров при закрытии ставит игру на паузу на несколько секунд

Я успешно сделал свой список лидеров в моей игре, используя коды

public void openLeaderboardsActivity() {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                if (!mHelper.isSignedIn()) {
                    beginUserInitiatedSignIn();
                } else {
                    String leaderboardId = getResources()
                            .getString(R.string.leaderboard_id);
                    startActivityForResult(mHelper.getGamesClient()
                            .getLeaderboardIntent(leaderboardId), 1001);
                }
            }
        });
    }

    public void submitLeaderboardsScore() {
        if (mHelper != null && mHelper.isSignedIn()) {
            mHelper.getGamesClient().submitScore(
                    getResources().getString(R.string.leaderboard_id),
                    GamePreferences.getInstance().getHighscore());
        }
    }

Но проблема в том, что когда я взял список лидеров из меню и вернулся, игра приостанавливается примерно на 4 секунды, а затем возобновляется, то же самое происходит, когда я выполняю действия по покупке приложений. Могу ли я знать, что я делаю что-то не так?

1 ответ

Является ли ваше приложение OpenGL? Если это так, то когда вы запускаете свою таблицу лидеров, контекст EGL вашего основного действия, вероятно, отбрасывается (нормальное, но раздражающее поведение Android). Затем, когда вы выходите из списка лидеров, происходит пауза, в то время как контекст создается заново, и все ваши текстуры и т. Д. Перезагружаются (что обычно происходит в onSurfaceCreated).

Таким образом, вам нужно избегать потери контекста и, следовательно, создавать его заново каждый раз, когда вы приостанавливаете свою деятельность.

Если вы ориентируетесь на Honeycomb или выше, попробуйте добавить это в свою деятельность:

getPreserveEGLContextOnPause();

В противном случае вы можете попробовать следующее:

В onPause() вашей активности удалите view.onPause(), чтобы остановить удаление контекста. Вместо этого поместите эту строку:

view.setVisibility(View.GONE);

Затем переопределите onWindowFocusChanged(boolean hasFocus), чтобы вернуть фокус обратно при повторном запуске вашего приложения....

@Override
public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);
    if (hasFocus && view.getVisibility() == View.GONE) {
         view.setVisibility(View.VISIBLE);
    }   
}

Это должно предотвратить потерю контекста и, следовательно, эти раздражающие паузы!:-)

Другие вопросы по тегам