Android - Как правильно обрабатывать методы onPause / onResume? - PullRequest
8 голосов
/ 22 апреля 2010

У меня есть приложение, которое начинает воспроизводить звуки и начинает / возобновляет игровой процесс в методе onResume (), но я замечаю, что если мое приложение было последним приложением, когда я переводил телефон в режим ожидания (экран выключен), и я просто нажимаю кнопку Меню, чтобы проверить время, затем телефон начинает играть в игру и звучит в фоновом режиме (приложение на самом деле не видно, только экран с датой / временем, но должен быть вызван onResumeв моем приложении).Что мне здесь делать?Есть ли способ узнать, что реактивирует приложение, а затем добавить условный оператор, который запускает игру, только когда приложение действительно отображается?

Вот фрагмент из моего onResume:

@Override
    protected void onResume()
    {
        mySaveGame = Utilities.loadSavegame(this);

        //check the savegame
        if(mySaveGame!=null)
        {
            //start game using savegame values
            this.startFromSavedGame(mySaveGame.getIsLevelComplete());   
        }
        else
        {
            //run the 1st-run components
            this.startFirstRun();
        }

        super.onResume();
    }

Единственное, что я могу придумать, чтобы предотвратить запуск игры, когда экран включается (даже если приложение не видно), это добавить this.finish () в качестве последней строки в onPause ().... но это заставляет вас перезапускать приложение каждый раз, когда вы захотите вернуться к нему, потому что прецессия была убита (и это хорошо, потому что мой onPause сохраняет постоянные данные, но это не элегантное решение).

Пожалуйста, помогите.

Ответы [ 2 ]

8 голосов
/ 22 апреля 2010

Рассматривали ли вы переход на onStart() и onStop() вместо onResume() и onPause()?

4 голосов
/ 15 августа 2011

У меня была та же проблема (мой музыкальный проигрыватель возобновил / приостановил на onResume()/onPause()), и лучшее решение, которое я нашел, это приостановить и возобновить свою деятельность, когда она находится на переднем плане, которую вы можете получить с помощью public void onWindowFocusChanged (boolean hasFocus) обратный вызов.

Редактировать: Это в старом и немного неправильном ответе - правильный ответ описан в блоге разработчиков Android: создание игр для Android, в которые приятно играть

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...