2014-06-26 4 views
5

Se in Android è stata impostata un'attività per attivare onNewIntent() quando riceve intenti quando è in stato di arresto o in pausa. Passa attraverso la seguente sequenza se riceve un intento durante l'esecuzione:Come si può distinguere onPause() a causa di onNewIntent contro l'azione dell'utente in android

onPause() -> onNewIntent() -> onResume()

Ma se siete alla pausa a causa di un'azione dell'utente basta avere onPause() .

Ora se vuoi fare qualcosa nel caso l'utente nasconda la tua app ma non nel caso tu stia ricevendo un nuovo intento di background. Facendo qualcosa come ad esempio l'annullamento di una registrazione solo quando la tua app viene nascosta, sembra che tu sia fregato.

Non saprai fino a un certo punto in futuro se hai la onPause perché un utente nasconde la tua app o a causa di un intento di sottofondo in entrata.

Mi manca qualcosa o è completamente rotto?

Perché non inviano semplicemente la richiamata onNewIntent se si ottiene un intento durante l'esecuzione. Piuttosto che la pausa, onNewIntent, riprendi la sequenza?

+0

hai trovato un modo per distinguere tra le due situazioni? –

risposta

0

Se qualcuno si imbatte nuovamente in questo caso - Non sarebbe possibile rilevare se onPause() è stato chiamato a causa di nuovo intento ma onResume() può essere rilevato. Basta aggiungere BUNDLE_KEY_NEW_INTENT_CALLED quando onNewIntent() viene chiamato e quindi controllare il flag in onResume() ed eseguire l'azione richiesta.

@Override 
    protected void onNewIntent(Intent intent) { 
     super.onNewIntent(intent); 
     intent.putExtra(BUNDLE_KEY_NEW_INTENT_CALLED, true); 
     setIntent(intent); 
    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     Intent intent = getIntent(); 
     boolean isResumedDueToNewIntent = (intent != null && intent.getBooleanExtra(BUNDLE_KEY_NEW_INTENT_CALLED, false)); 
     if (isResumedDueToNewIntent) { 
      actOnNewIntent(); 
     } 
    } 
Problemi correlati