2010-04-22 20 views
8

Ho un'app che inizia a riprodurre suoni e avvia/riprende il gameplay nel metodo onResume(), ma quello che sto notando è che se la mia app era l'ultima applicazione in esecuzione quando mettevo il telefono in standby (schermo spento), e premo semplicemente il pulsante Menu per controllare l'ora, quindi il telefono inizia a giocare e suona in sottofondo (l'app non è effettivamente visibile, solo lo schermo con la data/ora è, ma onResume deve essere stato chiamato in la mia app). Cosa devo fare qui? C'è un modo per discernere cosa sta riattivando l'app e quindi aggiungere un'istruzione condizionale che avvia il gioco solo quando l'app è effettivamente visibile?Android - Come gestire correttamente i metodi onPause/onResume?

Ecco un frammento del mio 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(); 
    } 

L'unica cosa che posso pensare di fare per evitare che il gioco di avviarsi quando lo schermo viene acceso (anche quando l'applicazione non è visibile) è per mettere this.finish() come ultima riga in onPause() ... ma questo ti obbliga a riavviare l'app ogni volta che vuoi tornare ad esso perché il precessore stesso è stato ucciso (il che va bene perché il mio onPause salva persistente dati, ma non è una soluzione elegante).

Per favore aiuto.

risposta

8

Avete considerato di passare a onStart() e onStop() anziché a onResume() e onPause()?

+0

Grazie per la risposta. Ho provato onStart()/onStop(), ma ottengo gli stessi risultati ... il gioco viene eseguito in background anche quando non è effettivamente visibile. Secondo la documentazione, onStart() viene chiamato prima onResume() (ecco perché non funziona nel mio caso) e onStop() "non può mai essere chiamato ..." – RyanM

+0

Hmmmm ... Sembra il blocco lo schermo non è considerato come se avesse il primo piano. Su quale dispositivo stai testando questo? – CommonsWare

+0

Sto usando un T-Mobile G1 (firmware per Android 1.6). – RyanM

4

ho avuto lo stesso problema (ho avuto il mio lettore musicale curriculum/pausa onResume()/onPause()) e la soluzione migliore che ho trovato è quello di mettere in pausa e riprendere la mia attività quando è in primo piano, che si può ottenere con public void onWindowFocusChanged (boolean hasFocus) callback.

Edit: Questo in una risposta vecchia e un po 'scorretta - risposta corretta è descritta nel blog Android Developers: making android games that play nice

+1

Hai notato che su alcuni dispositivi suWidowFocusChanged con hasFocus == false verrà chiamato quando cambi il volume? – Gallal

+0

Dal mio post, Google ha fornito un'alternativa migliore che tratta correttamente il problema su tutti i dispositivi/firmware, ho modificato il mio post originale sopra. – MichalisB

Problemi correlati