2012-07-05 12 views
7

Ho un'attività chiamata HomeActivity che ha un SurfaceView e mostra un'immagine di anteprima della fotocamera. Questa attività è silenziosa e si sente lenta se la si avvia/si riavvia.onCreate sempre chiamato se si sta tornando con intento

Così ho fatto alcune indagini e ho scoperto che in qualche modo viene sempre chiamato il metodo onCreate. Secondo me questo non dovrebbe accadere se l'attività è già stata avviata?

Il documentation dice: Chiamato quando l'attività viene creata per la prima volta. È qui che dovresti eseguire tutte le normali impostazioni statiche: creare viste, associare dati agli elenchi, ecc. Questo metodo fornisce anche un pacchetto che contiene lo stato precedentemente congelato dell'attività, se ce n'era uno. Sempre seguito da onStart().

Ecco il metodo, che gestisce tornare indietro:

protected void gotoHome() { 
    final Intent intent = new Intent(SomeOtherActivity.this, HomeActivity.class); 
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    startActivity(intent); 
} 

Edit:

ecco come lo sto lasciando HomeActivity ... niente di speciale:

final Intent i = new Intent(HomeActivity.this, SomeOtherActivity.class); 
startActivity(i); 
+0

Assicurarsi di non terminare() HomeAttività all'avvio di un'altra attività da esso. – Egor

+0

chiamate onCreat() quando si torna con il metodo 'gotoHome()'? –

+0

@Egor Non sto chiamando finish() – Mark

risposta

14

Sì, quando si desidera tornare alla HomeAttività, è necessario utilizzare questi flag:

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP); 

Ecco la relativa sezione della documentazione su Intent.FLAG_ACTIVITY_CLEAR_TOP:

L'istanza attualmente in esecuzione di attività B nell'esempio sopra metodo di volontà o ricevere il nuovo intento si stanno iniziando qui nella sua onNewIntent() , o essere esso stesso finito e riavviato con il nuovo intento . Se ha dichiarato che la sua modalità di avvio è "multiplo" (il valore predefinito ) e non hai impostato FLAG_ACTIVITY_SINGLE_TOP nello stesso intento , allora sarà terminato e ricreato; per tutte le altre modalità di lancio o se è impostato FLAG_ACTIVITY_SINGLE_TOP, questo Intent sarà consegnato all'istanza corrente suNuovaIntent().

+0

Grazie mille! Facepalm ... potrebbe avere questa idea! – Mark

+0

A volte mi sorprende la velocità con cui puoi ottenere una risposta utile da queste parti ;-) Felice di essere di aiuto. –

+0

Ciao David, l'oncreate di My activitiy viene chiamato ogni volta che torno dalla sua attività figlio, puoi aiutarmi? –

Problemi correlati