guide - android onnewintent



Avere un'istanza di attività (2)

Ho un problema con la navigazione delle attività e il back stack e speravo che tu potessi chiarirlo.

Il problema

Attività di root >>> SecondActivity >> HomeButton

Questo poi mi porta alla home page e da lì seleziono ...

Gmail >> Messaggio >> Apri allegato nella mia applicazione >> ImportActivity >> RootActivity

Il risultato è una nuova attività avviata e un'altra istanza della mia applicazione utilizzata. Questo è inaccettabile in quanto non voglio che due attività distinte in esecuzione ne voglio solo una.

Il risultato desiderato

Quello che voglio succedere è quando l'utente apre l'allegato e ImportActivity finisce ciò che sta facendo (ha android:noHistory impostato su true) e chiama startActivity(intent) , RootActivity viene avviato, ma mantenendo solo un'istanza e il resto delle attività su di esso nell'attività originale (in questo caso SecondActivity ) vengono rimossi.

Il motivo per cui lo voglio è se l'utente naviga fuori dalla mia applicazione dopo aver importato il file e poi tocca l'icona dell'app carica la prima attività con il suo back stack e ho due attività in esecuzione in cui l'utente può trovarsi in due parti diverse di la mia applicazione in una volta.

Quello che ho provato

Ho giocato con la modalità di lancio, ma nessuno di loro mi fornisce la funzionalità di cui ho bisogno.

Modalità di lancio che ho provato ..

android: launchMode = "singleTask" - questo ha appena riavviato l'attività di root ogni volta che è stato avviato. Anche se l'utente ha premuto il pulsante home nella mia applicazione e ha toccato l'icona dell'app, il back stack è stato distrutto.

android: launchMode = "singleInstance = non consente l'esecuzione di altre attività nell'attività.

Inoltre, quando si chiama l'intento di avviare RootActivity ho usato quanto segue senza alcun risultato.

Intent i = new Intent(ImportActivity.this,TrackingActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);

È possibile fare ciò che voglio?

Grazie in anticipo


Answer #1

Non è necessario alcun launchMode di launchMode speciale per fare ciò. Se la tua attività di importazione avvia l'attività di root con Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP questo dovrebbe fare ciò che vuoi. taskAffinity tu abbia un problema con taskAffinity . Prova questo:

Nel tuo manifest, nella dichiarazione per importActivity aggiungi questo:

android:taskAffinity=""

Se questo non funziona, per favore pubblica il tuo manifest in modo che possiamo guardarlo.


Answer #2

Non sono sicuro di averlo capito, ma se vuoi andare alla tua attività di "root" senza perdere altro stack di applicazioni, sarebbe Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP diretto su flag al tuo intent e senza configurazioni aggiuntive su Manifest ... e se devi separare l'attività per creare un nuovo stack completo completo di quello che puoi utilizzare Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP come hai descritto.





android-lifecycle