Necessario il chiarimento di FLAG_ACTIVITY_NEW_TASK

Quindi il mio problema è:

  • Avvio App1, apro Screen1 e quindi Screen2.
  • Premo Home, lasciando App1 in background.
  • Apro App2, avvio App1.Screen1 con FLAG_ACTIVITY_NEW_TASK, in attesa di essere su App1.Screen2 nell’attività in precedenza a sinistra. Invece su App1.Screen1 e sul sistema chiamato onNewIntent ().

Quando torno indietro, Sceen2 e Screen1 tornano di nuovo. Non uso altri flag di intent o modalità di avvio.

Qualcuno potrebbe spiegare cosa sta succedendo ??

Android ha decine di bug relativi ad attività e attività.

Ciononostante, Google ha cambiato il comportamento delle attività tra le versioni del sistema operativo e non ha informato gli sviluppatori, che è la cosa più fastidiosa a riguardo.

jakk – Se non hai impostato alcun flag sulle attività (A o B), il comportamento che stai descrivendo è SBAGLIATO .

E per tutti quelli che dicono che non ci sono problemi con la documentazione, prova questo:

  1. Creare un’applicazione con Attività A (attività di avvio) e B (con la modalità di avvio predefinita per entrambi).
  2. Avvia l’applicazione: un’attività viene creata solo con l’attività A.
  3. Da un pulsante dell’attività A, avvia l’attività B con un FLAG_ACTIVITY_NEW_TASK.
  4. Fai clic sul pulsante più volte e vedrai che l’attività B viene creata più volte all’interno dell’attività, che NON è come dice la documentazione.

Esistono più scenari per dimostrare che la documentazione è BAD / ERRATA.

Nel terzo passaggio, quando apri App2 e avvii App1.Screen1 con Intent.FLAG_ACTIVITY_NEW_TASK devi impostare anche Intent.FLAG_ACTIVITY_SINGLE_TOP per ottenere ciò che desideri. È un bug di Android 🙁

Sappi anche che il comportamento è anche un po ‘rotto se apri la tua app per la prima volta dal tuo IDE (IntelliJ, Eclipse), o dopo averla installata sul mercato (Google Play) o da un download del browser. Consulta Come impedire più istanze di un’attività quando viene avviata con intenti diversi e http://code.google.com/p/android/issues/detail?id=26658

Prova questo. Per me funziona.

 intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |Intent.FLAG_ACTIVITY_CLEAR_TASK); startActivity(intent); 

Questo sembra essere in linea con la documentazione su http://developer.android.com/guide/topics/fundamentals/tasks-and-back-stack.html .

FLAG_ACTIVITY_NEW_TASK è equivalente a launchMode = singleTask e lì ho letto

Tuttavia, se un’istanza dell’attività esiste già in un’attività separata, il sistema indirizza l’intento all’istanza esistente tramite una chiamata al suo metodo onNewIntent (), anziché creare una nuova istanza

L’avvio dell’attività senza FLAG_ACTIVITY_NEW_TASK dovrebbe darti il ​​comportamento previsto.

FLAG_ACTIVITY_NEW_TASK posiziona la tua nuova attività su un nuovo stack di attività. Mi riferirò alle attività come A e B.

Quando avvii la prima app, hai una singola attività con A in essa. Attività 1 = A

Facendo clic sulla seconda attività, viene inserito B nell’attività. Attività 1 = AB

Quando fai clic su home, mantieni l’attività. Attività 1 = AB (ancora)

Aprendo la seconda app e inviando l’intento A con il nuovo flag di attività, verrà creato un NUOVO task con solo A su di esso. Ora hai due compiti. Attività 1 = AB, Attività 2 = A

Se togliendo questa disposizione con il tasto indietro, otterrai 2A, 1B, 1A, che è ciò che stai vedendo. Questo è il risultato atteso.