2011-12-23 25 views
5

Ho sviluppato un'applicazione in Android 4.0.3 (Ice Cream Sandwich), sto utilizzando due attività per testare la navigazione dell'attività. Ma ho osservato un comportamento diverso nella navigazione delle attività.Si tratta di una nuova implementazione in Android 4.0?

Sto chiamando Attività B Dall'attività A. Nell'attività B sto solo chiamando il metodo finish(). In modo che possiamo vedere l'attività precedente A. Funziona esattamente come previsto, ma il problema è per la navigazione indietro (chiamata metodo di finitura o premendo back-key), sta chiamando onCreate() metodo di attività A invece di chiamare il onResume (). Ma nelle versioni precedenti non si comporta in questo modo. È una nuova implementazione in Android 4.0 ??

Ecco l'esempio che ho implementato:

Activity_A:

public class Activity_A extends Activity { 

    /** Called when the activity is first created. */ 
    static int count=0; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     TextView text=(TextView)findViewById(R.id.textcontent); 
     text.setText("Activity 1 called:"+(++count)+" Times"); 
    } 

    public void onClick(View v) 
    { 
     Intent intent=new Intent(this,Activity2.class); 
     startActivityForResult(intent, 1); 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    Log.d("onActivityResult", "Called with Code:"+resultCode); 
    } 

} 

Activity_B:

public class Activity_B extends Activity { 

     /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     TextView text=(TextView)findViewById(R.id.textcontent); 
     text.setText("Activity 2"); 
    } 

    public void onClick(View v) 
    { 
     setResult(1); 
     finish(); 
    } 
} 

preghiamo di controllare e fatemi sapere se sto facendo alcun errore.

Grazie, Ram.

+0

Domanda: onResume arriva dopo onCreate? Penso che l'attività A sia stata abbandonata da Android dopo aver chiamato Activity B, cosa che potrebbe accadere su tutte le piattaforme Android. –

risposta

1

Questo è dalla documentazione Activity Android (Link here):

  • Se un'attività in primo piano sullo schermo (in cima alla pila), è attivo o in esecuzione.
  • Se un'attività ha perso la messa a fuoco ma è ancora visibile (ovvero una nuova attività non di dimensioni normali o trasparente si concentra sulla parte superiore della propria attività), viene messa in pausa. Un'attività sospesa è completamente attiva (mantiene tutte le informazioni sullo stato e sui membri e rimane collegata al gestore di finestre), ma può essere eliminata dal sistema in situazioni di memoria estremamente bassa.
  • Se un'attività viene completamente oscurata da un'altra attività, viene interrotta. Conserva comunque tutte le informazioni sullo stato e sui membri, tuttavia, non è più visibile all'utente, quindi la sua finestra è nascosta e verrà spesso uccisa dal sistema quando la memoria è necessaria altrove.
  • Se un'attività viene messa in pausa o interrotta, il sistema può abbandonare l'attività dalla memoria chiedendole di terminare o semplicemente uccidendone il processo. Quando viene visualizzato di nuovo all'utente, deve essere completamente riavviato e ripristinato allo stato precedente.

Forse i punti 3 e 4 sono rilevanti per voi.

+0

ma sono solo circa due attività. E ancora una volta è la prima app di terze parti nel mio dispositivo (Samsung Nexus S) dopo l'aggiornamento a 4.0.3, Quindi come potrebbe essere il problema di memoria bassa ?? – ram

+0

Dal diagramma delle attività: se l'attività oscura la vecchia attività, l'attività viene interrotta. Se il sistema non ha bisogno di memoria chiama onRestart, anziché onResume. Forse è da qui che parte il tuo programma? Non hanno menzionato alcun cambiamento in gelato per quanto riguarda andare su onCreate da onStop, a meno che il sistema non abbia bisogno di memoria. – Davos555

+0

OK Grazie mille per le tue informazioni. – ram

7

Ho lo stesso problema !! Vai su Impostazioni/Sviluppo/e deseleziona 'Attività di distruzione'

+0

** Nota **: - Il telefono deve essere riavviato per vedere l'effetto. – Deepak

+0

se apro la fotocamera per acquisire l'immagine su Android 4.03 ha chiamato il metodo AtActivityResult prima di acquisire o annullare l'immagine, quindi il resultcode è sempre nullo e non posso gestire l'evento di acquisizione di immagini su onActivityResult. hai idea del perché questo accada? sto testando questo su htc me 4.03, anche se questo funziona su i-tab intext 4.04 versione. –

0

E per mantenere lo stato dell'attività utilizzare i metodi onSavedInstanceState() e onRestoreInstanceSate().

0

Vedere questa risposta: https://stackoverflow.com/a/16147110/1306419. cito da lì:

Potrebbe essere necessario dichiarare la modalità di avvio dell'attività A (attività principale) come: android:launchMode="singleTop" nel numero AndroidManifest.xml. se non lo fai, Android utilizza la modalità di avvio standard, ovvero The system always creates a new instance of the activity in the target task. e l'attività viene ricreata (Android documentation).

Con singleTop il sistema torna all'attività esistente (con l'extra originale), se si trova nella parte superiore dello stack posteriore dell'attività.