2011-10-06 10 views
8

Questo argomento è continuare di questo: Android. How to start activity without creating new one?Come riutilizzare le attività? Non per creare attività di volta in volta

Ho letto che le attività vengono distrutte quando fare clic sul pulsante INDIETRO. Non possono essere distrutti quando spostarsi più in profondità per raggruppare e quindi richiamare le attività. utilizzando android:launchMode="singleTask" per esempio

è possibile che le attività non vengano distrutte quando si fa clic sul pulsante INDIETRO e quindi si esegue di nuovo l'attività?

+1

Non lo consiglierei perché l'utente ha la possibilità di premere il tasto home per farlo (Android ucciderà comunque la tua app se ha bisogno di memoria). A causa di tali decisioni gli utenti iniziano a utilizzare task killer che sono un disastro (a mio avviso). Quindi gli sviluppatori stanno cercando di far funzionare le loro applicazioni perché l'utente sta uccidendo la sua applicazione da un killer del compito ... Non scherzare con il ciclo di vita di Android ;-) – Knickedi

+0

Perché vorresti farlo anche tu? I. Non posso pensare a un singolo beneficio. – frostymarvelous

+0

Un vantaggio è che se il layout dell'attività è complesso e richiede ad es. 10 secondi per essere caricati quindi si può risparmiare quel 10 secondi con riutilizzare l'attività senza crearla da zero. – Ehsan

risposta

0

È possibile ridefinire il metodo "onBack" della vostra attività, qualcosa di simile

public void onBackPressed() 
{ 
    moveTaskToBack (true); 
} 
16

L'implementazione predefinita del pulsante Indietro è la finitura l'attività corrente. Puoi comunque intercettare quel tasto premere e fare quello che vuoi con esso. Ad esempio, invece di terminare la tua attività corrente, potresti "far apparire" l'attività precedente e far sembrare che la normale implementazione sia a portata di mano.

per intercettare il tasto back stampa: Android: intercepting back key

E per iniziare la vostra attività precedente senza creare uno nuovo ogni volta:

Intent i = new Intent(View.getContext(), PreviousActivity.class); 
i.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 
startActivity(i); 

Buona fortuna.

+0

+1 Grazie. Funziona bene –

+1

Ho trovato questa risposta utile, ma una nota di avvertimento agli sviluppatori ignari: quando hai bisogno di un contesto, ** non utilizzare il contesto dell'applicazione ** a meno che tu non sappia cosa stai facendo . In questo caso, puoi semplicemente passare 'this' (l'istanza Activity corrente) al posto del contesto dell'applicazione. –

+0

Grazie ragazzi ... mi avete salvato il tempo ... !!! –

0

È possibile interrompere l'attività per essere chiusa quando si preme di nuovo button.You può anche disabilitare indietro pulsante qui sotto usando il metodo

public void onBackPressed() 
{ 
    //super.onBackPressed(); 
} 

inoltre è possibile iniziare una nuova attività se l'utente clicca sul pulsante Indietro come

public void onBackPressed() 
{ 
    startActivity(new Intent(context, newActivity.class)); 
} 

In realtà si dovrebbe terminare l'attività se l'utente preme il pulsante Indietro. Se ci può essere più attività si troverà nello stack posteriore in modo che ci possano essere problemi di memoria in tal caso Android distruggerà il tuo activi legami che sono fermi e non riprendono per molto tempo.

+0

Attenzione: il nuovo metodo 'onBackPressed()' richiede l'API 5 o superiore. Utilizza onKeyDown per dispositivi precedenti. –

+0

'onBackPressed()' richiede API7 e sopra quindi se vogliamo implementare più in basso di API5 dobbiamo usare onKeyDown – Dharmendra

+0

mi sono perso qualcosa? Continuo a pensare che sia [API5] (http://developer.android.com/reference/android/app/Activity.html#onBackPressed()).:) –

Problemi correlati