Autore Topic: Chiusura activity  (Letto 966 volte)

Offline supervanzo

  • Nuovo arrivato
  • *
  • Post: 21
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Tab 2
  • Sistema operativo:
    Windows
Chiusura activity
« il: 14 Marzo 2014, 10:21:46 CET »
0
Salve a tutti, volevo essere sicuro del giusto funzionamento della mia app.
Nella prima activity ho un semplice pulsante che mi apre un'altra activity chiamata "Dashboard".
Nella seconda activity, invece, cliccando su un pulsante, dovrei riaprire l'activity con alcuni dati aggiuntivi.
La domanda che mi ponevo è se cosi' facendo le activity che ho gia aperto si chiudono o se continuano a rimanere in memoria occupandola.
Con il comando finish() dovrei pero' permetterlo giusto?

grazie in anticipo



Prima activity
Codice (Java): [Seleziona]
                buttonGame.setOnClickListener(new View.OnClickListener() {
                                  public void onClick(View arg0) {
                                    Intent intent = new Intent(getApplicationContext(), DashboardGame.class);
                                    startActivity(intent);
                                    finish();
                                  }
                                });


Seconda activity
Codice (Java): [Seleziona]
buttonNew.setOnClickListener(new View.OnClickListener() {

                        public void onClick(View view) {
                                // Launching register user activity
                                Intent intent = new Intent(getApplicationContext(), DashboardGame.class);
                                intent.putExtra(pkg+".myString", selected);
                                startActivity(intent);
                                finish();
                        }
                });

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Chiusura activity
« Risposta #1 il: 14 Marzo 2014, 10:47:07 CET »
0
La domanda che mi ponevo è se cosi' facendo le activity che ho gia aperto si chiudono o se continuano a rimanere in memoria occupandola.

Il finish() va bene messo così per chiudere l'activity. Però il motivo principale per cui si usa non è la riduzione della memoria occupata, ma la gerarchia di navigazione (il fatto che l'activity chiusa non si debba riaprire se premi il tasto back).

La dalvik VM in cui girano le app è basata sul meccanismo del garbage collection (GC) che periodicamente controlla gli oggetti non più usati e libera la memoria ad essi assegnata. Per cui chiudere l'activity con finish non libera la memoria, la rende solamente "candidata ad essere liberata" dal garbage collector.

Quindi, la questione dell'uso della memoria è un principio giusto, ma non deve essere affrontato cercando di liberare quella che non usi più. Le raccomandazioni tipiche sono di creare meno oggetti possibile (e ovviamente riutilizzare quelli che si devono creare per forza) e evitare i memory leak. Giusto per fare un esempio, ogni volta che modifichi il contenuto di un oggetto String, nella pratica ne crei uno nuovo; per cui se fai pesanti operazioni su testi usando oggetti String, alla fine finirai per ingolfare la memoria di oggetti creati e abbandonati.

NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline supervanzo

  • Nuovo arrivato
  • *
  • Post: 21
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Tab 2
  • Sistema operativo:
    Windows
Re:Chiusura activity
« Risposta #2 il: 14 Marzo 2014, 12:25:23 CET »
0
Risposta molto esauriente! grazie mille bradipao!