2011-01-25 7 views
5

Esiste un modo per stabilire se un'attività viene ripresa (ad esempio, onResume viene chiamata) dalla schermata iniziale/launcher?C'è un modo per distinguere tra un'attività Android su Riduci dalla schermata iniziale?

Per esempio, se ho un Applicazione con due attività, A e B.

Scenario 1: Alcuni azione dell'utente sull'attività Un richiamerà Attività B, portandolo in primo piano - Attività che richiedono movimento A sullo sfondo. Quando l'attività A passa in secondo piano, passa attraverso onPause() e onStop(). L'utente (ora sull'attività B) termina l'attività o preme il pulsante "indietro", riportando l'attività A in primo piano, causando una sequenza onRestart(), onStart(), onResume().

Scenario 2: Se l'utente preme il tasto "home" mentre l'attività A è in primo piano e poi ri-invoca l'applicazione dal programma di avvio, passa attraverso lo stesso ciclo di vita come nello scenario 1. Vale a dire L'utente fa clic sul pulsante "home". L'attività passa attraverso onPause() e onStop(). L'utente avvia nuovamente l'applicazione, facendo tornare in primo piano l'attività A, passando nuovamente nella stessa sequenza onRestart(), onStart(), onResume() come nello scenario 1.

Per quanto posso dire, il L'attività non ha modo di sapere come è stata ripresa, semplicemente sa che è stata riportata in vista. In effetti, ho la sensazione che in Android non esista più un concetto di "Applicazione", nel senso di qualcosa che ha un'unica voce e un punto di uscita.

+1

Perché ti importa di questo? – Macarse

+0

Ah. In realtà, sto cercando di tenere traccia del numero di lanci di applicazioni, ma finora non ho trovato un modo per distinguere tra i diversi scenari onRestart(). –

+0

Ricorda che ci sono altri casi in cui riprenderemo un'attività, oltre al solo uso del pulsante Home. È una nuova applicazione lanciata quando l'utente riceve una chiamata, il sistema uccide la tua app, quindi la riprende? Penso che sarà meglio monitorare le interazioni nella tua app, piuttosto che il "lancio", comunque definito. – sargas

risposta

2

nello scenario 2, l'attività riceverà una chiamata onNewIntent, con l'intento del programma di avvio passato.

+0

Secondo i documenti, onNewIntent viene chiamato solo per alcune modalità di avvio: "singleTask" e "singleTop".Sono riuscito a farlo funzionare solo per "singleTask", tuttavia i documenti non consigliano la modalità di avvio. –

+0

Questo approccio sembra funzionare bene per me. Devo contrassegnare l'attività "Punto di ingresso" come "singleTask", tho '. Grazie! –

2

È possibile acquisire il pulsante indietro premere sull'attività B e passare un valore aggiuntivo all'attività A. Se è presente un valore aggiuntivo, l'attività è stata ripresa dal ripristino dell'attività B, se non vi è alcun valore aggiuntivo dell'attività è stato ripreso dall'essere nascosto.

+0

Ho la sensazione che avrò bisogno di gestire entrambi i casi (l'attività B ritorna con un risultato * e * "L'utente preme il pulsante Indietro sull'attività B) –

1

Potrebbe abilitare l'utilizzo startActivityForResult() per avviare l'attività B e utilizzare onActivityResult() per rilevare che l'attività B è finita?

+0

Immagino che onActivityResult() si verificherebbe dopo che tutte le altre callback sono state completate? Ho commentato sopra, in realtà sono interessato al conteggio dei lanci di applicazioni, motivo per cui mi sono appassionato a onStart() e onResume(). Ho visto altre risposte che suggeriscono onCreate() ma che non si attiva all'avvio dal schermata "home" Potrei decrementare il conteggio se qualcosa ritorna da onActivityResult() ma sembra kludgy - forse inevitabile? –

Problemi correlati