2010-03-17 12 views
7

Nella mia applicazione è possibile navigare tra diverse attività fino a quando la pila di attività è abbastanza profonda.Chiusura simultanea di più attività Android

Ci piacerebbe un pulsante per ogni attività che ti riporta direttamente al menu principale, ad esempio tutte le attività dalla pila tranne la prima.

Ho inserito il pulsante in una vista che posso facilmente inserire in ogni attività nell'applicazione, ma non riesco a capire come chiudere diverse attività in un colpo solo.

(Se possibile, sarebbe bene se la vista poteva capire come molte attività per chiudere per sé -. Vale a dire rilevare quanto in profondità nello stack la propria attività è)

risposta

16

Dai un'occhiata alla bandiera intento FLAG_ACTIVITY_CLEAR_TOP che dice che porta l'attività mirata in cima allo stack, rimuovendo tutto il resto che potrebbe esserci sopra. Quindi usa quel pulsante che puoi aggiungere a tutte le tue attività per lanciare un intento che si rivolge al tuo menu principale, con quel flag set.

Dalla documentazione:

se impostato, e l'attività di essere lanciato è già in esecuzione nel compito corrente , allora invece di lancio di una nuova istanza di tale attività, tutte le altre attività verrà chiuso e l'intento verrà consegnato all'attività vecchia (ora in alto) come un nuovo intent.

Ad esempio, si consideri un compito consistente di attività: A, B, C, D. Se D chiama startActivity() con un intento che risolve il componente dell'attività B, poi C e D essere finito e B ricevere il dato intenti, con conseguente stack ora essere: a, B.

l'istanza attualmente in esecuzione di attività B nel precedente esempio né ricevere il nuovo intento sei partenza qui nel suo onNewIntent() metodo, o essere esso stesso finito e riavviato con il nuovo intento. Se ha dichiarato che la sua modalità di avvio è "multiple" (impostazione predefinita) e che non è impostata su FLAG_ACTIVITY_SINGLE_TOP in lo stesso intento, quindi sarà terminato e ricreato; per tutte le altre modalità di avvio o se FLAG_ACTIVITY_SINGLE_TOP è impostato su , questo intent verrà consegnato all'istanza attuale di onNewIntent().

Questa modalità di lancio può essere utilizzato anche per buon effetto in combinazione con FLAG_ACTIVITY_NEW_TASK: se utilizzato per avviare l'attività principale di un compito, porterà alcun attualmente in esecuzione istanza di tale compito al primo piano, e quindi cancellarlo allo stato root . Ciò è particolarmente utile, ad esempio, all'avvio di un'attività dal gestore di notifica .

+0

Lo faremo - voglio solo essere sicuri che sia totalmente giusto prima: sono stato punto da quello prima ... – teedyay

+1

Infatti - questo ha avuto l'effetto desiderato per me: intent.SetFlags (ActivityFlags.ClearTop | ActivityFlags.SingleTop); – scolestock

-1

Si potrebbe dichiarare che prima attività android:launchMode="singleTask" (more) e poi basta avviarlo con un Intent.

MODIFICA: Il mio suggerimento si basa sul presupposto che si desideri avere una singola istanza dell'attività a cui tornare. Altrimenti è sbagliato.

+1

Suggerire l'uso di singleTask qui indica di non capire cosa fa singleTask ... va bene, è -is-confondere, e ha molte ripercussioni sul comportamento dell'attività. Quindi, a meno che tu non comprenda e voglia tutto ciò che ti fa, ti preghiamo di evitarlo. Il 99% delle app deve solo utilizzare le modalità di lancio normale o talvolta single-top. – hackbod

Problemi correlati