2011-11-15 9 views
22

Nella mia situazione, c'è un caso in cui è necessario verificare che l'attività venga eseguita solo una alla volta.Come mantenere una singola istanza di attività ma essere in grado di aggiornare la vista?

Ho trovato se ho impostato il LauchMode dell'attività, posso raggiungere l'obiettivo di singola istanza, ma non aggiornerà la visualizzazione dell'attività.

Questa attività è lanciato da startActivityForResult, e noi inviare l'URI con l'intento di attività.

Discutiamo con questa determinata caso:

  • galleria - Lauch questa attività con imageA.

  • fotocamera - lauch questa attività con Imageb.

La mia richiesta non è quello di distruggere il vecchio attività, ma l'attività che appena ricevuto il nuovo infomation intento dovrebbe aggiornare la visualizzazione.


ho trovato un nuovo metodo, onNewIntent. Questo metodo può aggiornare l'intento prima di riprendere. Lo proverò.

+0

Perché è così importante che l'attività rimanga in vita? Penso che sia impossibile. –

+0

perché se ci sono due istanze di attività, causerà qualche problema nella nostra app. quindi ho bisogno di essere sicuro, è una singola istanza. – johnsonYu

risposta

60

si può avere un'attività con un attributo manifesto di SingleInstance. Non appena l'attività viene riavviata, onResume viene chiamato. È possibile aggiornare la vista con la nuova immagine e invalidare la visualizzazione precedente.

<activity .. 
     android:launchMode= "singleInstance" /> 
+0

le informazioni sull'immagine sono archiviate nell'Intent.but ottengo le informazioni sull'intenzione con getIntent() è il vecchio. forse è la domanda chiave. Grazie per la risposta. – johnsonYu

+2

use onNewIntent() può aggiornare l'intento. – johnsonYu

+0

Esiste un modo per impostare l'attività nello stack di attività attività di cui l'attività viene avviata. ; questo metodo avvierà una nuova attività con l'attività. – johnsonYu

28

Nel vostro manifesto, utilizzare android:launchMode="singleTask" invece di android:launchMode="singleInstance". L'utilizzo di singleInstance restituisce solo l'istanza esistente se si trova nella parte superiore dello stack. singleTask, invece, tornare l'istanza esistente dell'attività, in quanto è sempre alla radice del compito.

Poi, quando viene lanciato l'istanza, ignorare onNewIntent per aggiornare l'interfaccia utente in base alla nuova intenti.

Fare riferimento alla the Andorid documentation per i dettagli.

+4

Concordo sul fatto che entrambe le modalità consentano solo un'istanza dell'attività, ma la tua interpretazione della differenza è errata. – ben75

Problemi correlati