38

Ho un'app che è molto gerarchica (le attività sono simili a League> Team> Position> Player) e quindi ho creato ciascuna attività singleTop per mantenere la navigazione sensata e prevenire istanze duplicate.Impostazione launchMode = "singleTask" vs impostazione activity launchMode = "singleTop"

Ora sto creando la mia seconda app e ho visto suggerire di dichiarare la mia domanda come singleTask per impedire le istanze duplicate. Qualcuno potrebbe aiutare a spiegare i vantaggi di ciascun approccio?

La mia nuova app è solo un'attività con 3 frammenti e quindi probabilmente aggiungerò un'attività di impostazioni e forse una FAQ.

EDIT: Ho appena realizzato che singleTask NON impedisce le istanze duplicate della mia app, come avevo pensato. Ora stiamo cercando il modo giusto per gestire questo ...

risposta

53

Penso che la tua definizione di singleTop e singleTask sia un po 'spenta. SingleTop potrebbe produrre un'istanza duplicata. Usiamo il tuo esempio, League> Team> Position> Player. Se nella schermata del giocatore c'è un pulsante che ti porterà alla schermata della lega, diventerà League> Team> Posizione> Giocatore> Lega.

Considerando che SingleTask garantisce che può esistere solo una istanza dell'attività.

+0

Sospettavo che non comprendessi appieno le loro definizioni. Grazie per il chiarimento. Il mio obiettivo principale era quello di gestire quando l'utente va in League> Team> Position e poi minimizza e rientra nell'app, che stava caricando League invece di Position. Dichiarando SingleTop, la mia app ora sta caricando sempre da dove avevo lasciato. Non sono sicuro del motivo per cui singleTask non lo fa. – NSouth

+0

@NSouth hai mai scoperto qual è il motivo per cui singletask non lo sta facendo? – batmaci

13

ho trovato la risposta qui: http://www.intridea.com/blog/2011/6/16/android-understanding-activity-launchmode

"singleTop":

La differenza da 'standard' è, se un'istanza di attività esiste già nella parte superiore del compito e sistema attuale percorsi intenti a questa attività, nessuna nuova istanza verrà creata perché verrà attivata un metodo onNewIntent() invece di creare un nuovo oggetto. Prendiamo l'integrazione di Twitter-oauth come esempio.

"singleTask":

Un nuovo compito viene sempre creato e una nuova istanza sarà spinto al compito come una radice. Tuttavia, se esiste un'istanza di attività in qualsiasi attività, il sistema indirizza l'intento a quell'istanza di attività tramite la chiamata al metodo onNewIntent(). In questa modalità, le istanze di attività possono essere trasferite alla stessa attività. E se l'utente fa clic sul tasto BACK dall'attività singleTask, il sistema restituirà l'utente all'attività precedente.

19

attività Android launchMode

4 modi ...

"singleTop" "singleTask" "SingleInstance"

La modalità di default "standard" è "standard".

Le modalità rientrano in due gruppi. standard e singleTop viene fornito da un lato e singleTask e singleInstance vengono da un altro lato.

La differenza principale tra standard e singleTop è in standard, ogni volta un nuovo intento per l'attività standard, viene creata una nuova istanza. In caso di SingleTop, viene creata una nuova istanza, ma un'istanza dell'attività è già in cima allo stack, non creerà una nuova istanza.

In realtà, il problema arriva, quando scarichiamo un'applicazione da un server e la lanciamo e la apriamo da lì. Dopo aver avviato l'applicazione, premere il tasto Home. Quindi fare clic su tutti i programmi e selezionare l'icona dell'applicazione dalla schermata principale. Quindi verrà creata un'altra attività nel caso dello standard, ma in singleTop non verrà creata alcuna nuova istanza.

Le modalità "singleTask" e "singleInstance" differiscono l'una dall'altra in un solo aspetto: Un'attività "singleTask" consente ad altre attività di far parte del suo compito. È alla base dello stack di attività, ma è possibile avviare altre attività (necessariamente "standard" e "singleTop") nella stessa attività. Un'attività "singleInstance", d'altra parte, non consente ad altre attività di far parte del suo compito. È l'unica attività nel compito. Se avvia un'altra attività, tale attività viene assegnata a un'attività diversa, come se FLAG_ACTIVITY_NEW_TASK fosse nell'intento.

http://smartandroidians.blogspot.in/2010/04/activity-launch-mode-in-android.html

5

Da Understanding Activity launch mode:

standard (impostazione predefinita): - Più istanze della classe di attività può essere un'istanza e più istanze possono essere aggiunti alla stessa attività o compiti diversi. Questa è la modalità comune per la maggior parte delle attività.

singleTop: - La differenza da standard è, se un'istanza dell'attività esiste già all'inizio della task corrente ed il sistema rotte l'intento di tale attività, non verrà creata nuova istanza perché sarà attivare un metodo onNewIntent() invece di creare un nuovo oggetto .

singleTask: - Una nuova attività verrà sempre creata e una nuova istanza sarà assegnata all'attività come root. Tuttavia, se esiste un'istanza dell'attività in qualsiasi attività, il sistema indirizza l'intento all'istanza dell'attività tramite la chiamata al metodo onNewIntent(). In questa modalità, le istanze di attività possono essere trasferite alla stessa attività. Questa modalità è utile per le attività che fungono da punti di ingresso.

singleInstance: - Come singleTask, con la differenza che l'istanza Nessuna attività può essere inserita nella stessa attività di singleInstance. Di conseguenza, l'attività con la modalità di avvio è sempre in un'unica attività di istanza dell'attività . Questa è una modalità molto specializzata e dovrebbe essere utilizzata solo in applicazioni che sono implementate interamente come un'attività .

Problemi correlati