2012-01-17 16 views
6

Non so perché sia ​​così difficile da capire. Ho la mia attività principale che, una volta lanciata, controlla se è la prima volta che viene aperta. In questo caso, chiude l'attività principale e apre l'attività di impostazione/introduzione con FLAG_ACTIVITY_NEW_TASK. Il processo di installazione comprende tre attività (A, B e C). Alla fine dell'attività C, come ottenerlo per cancellare e l'attività di installazione che contiene A, B e C e avviare di nuovo l'attività principale. Ho provato ad aggiungere FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_CLEAR_TOP all'attività principale Intent ma quando premo BACK, ritorna all'attività C del processo di installazione. Come faccio a chiarire il compito delle attività A, B e C quando C termina e avvia il main? Grazie!Pulizia dell'attività e avvio di una nuova attività

Sto costruendo in Android 1.6 (API 4), quindi alcuni dei flag Activity potrebbero essere limitati.

+0

Termina l'attività C quando si procede verso l'attività principale. – Mudassir

+0

cancellare la bandiera richiede solo una attività dalla pila, no? – L7ColWinters

+0

@Mudassir Se ho appena terminato l'attività C, quando torno INDIETRO dell'attività principale, si passa all'attività B. – Brian

risposta

0

ho risposto a una domanda simile here

Come Mudassir dice nel loro commento appena finish() vostre attività subito dopo l'avvio di una nuova.

+0

No, desidero consentire all'utente di tornare indietro di un passaggio se necessario durante il processo di installazione. Tutto quello che voglio è finire la pila di attività di configurazione quando l'ultimo passo è finito. – Brian

2

FLAG_ACTIVITY_CLEAR_TOP cancella le attività in cui si trova della stessa istanza di attività. Qui nel tuo caso tutte le tue attività sono di istanze diverse, pertanto FLAG_ACTIVITY_CLEAR_TOP non funzionerà. Per cancellare il tuo compito, crea un'istanza di attività in ciascuna delle tue attività e assegna quell'istanza "questa" al tuo metodo onCreate di ogni attività. ogni volta che si desidera cancellare il task, chiamare tale instance.finish(). e inizia l'attività che desideri.

+1

Può finire tutto TRE attività contemporaneamente? – Mudassir

+0

non è una volta, vedi che hai Attività A, B, C. Per finire tutto questo in una volta, devi solo fare qualcosa di simile sotto l'attivitàA_instace.finish(); activityB_instace.finish(); activityC_instace.finish(); assicurati inoltre che le tue istanze siano statiche pubbliche dall'attività in cui hai dichiarato. Se è così, puoi effettivamente cancellare il tuo compito da qualsiasi luogo dal modo in cui ho appena mostrato sopra – amandroid

+0

Cosa intendi esattamente per istanza? Puoi spiegare per favore usando un codice? – Mudassir

0
class A extends Activity { 
public static Activity instanceOfA = null; 

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    instanceOfA = this; 
} 
} 

class b extends Activity { 
public static Activity instanceOfB = null; 

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    instanceOfB = this; 
} 
} 


class c extends Activity { 
public static Activity instanceOfC = null; 

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    instanceOfC = this; 
} 
} 

Ora supponiamo che si desidera eliminare tutte le attività dalla vostra attività in corso, quindi chiamare instanceOfA.finish(); instanceOfB.finish(); instanceOfC.finish();

+9

Questo è inaccettabile. Stai perdendo tutte le attività e tutte le risorse (vedi hiarerche, * immagini *) associate a loro. –

+0

Qualcosa di simile a questo [risposta] (http://stackoverflow.com/a/3008684/269876) si adatta meglio. Come sottolinea @ Jonas Alves, stai perdendo tutte queste attività usando la statistica. Invece, vieni con un messaggio che puoi trasmettere quando la configurazione è completa, e fare in modo che ogni attività di impostazione ascolti la trasmissione. Quando ricevono la notifica di installazione completa, possono terminare se stessi e non sono necessarie statiche per raggiungere questo obiettivo. –

+2

I riferimenti statici alle attività indicano che le visualizzazioni rimangono in memoria e non vengono riciclate, causando una perdita di memoria. – George

1

In realtà questo può essere realizzato con startSubActivity

public class A extends Activity { 
    public onButtonClick() { 
     startActivityForResult(new Intent(this, B.class), 0); 
    } 
    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     if (resultCode == RESULT_OK) { 
     finish(); 
     } 
    } 
} 

public class B extends Activity { 
    public onButtonClick() { 
     startActivityForResult(new Intent(this, C.class), 0); 
    } 
    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     if (resultCode == RESULT_OK) { 
     setResult(RESULT_OK); 
     finish(); 
     } 
    } 
} 

public class C extends Activity { 
    public onButtonClick() { 
     setResult(RESULT_OK); 
     finish(); 
    } 
} 

Penso che questa sia la strada giusta, non si perdita di nulla in questo modo.

PS: so che questo è vecchio post, ma forse qualcuno troverà questo utile.

Problemi correlati