Domanda

Ho un'attività e chiamo il metodo finitura () e l'attività non viene cancellata dalla memoria.

Dopo aver chiamato finitura (), vedo che il metodo OnDestroy () viene eseguito con successo (e a cancellare tutte le mie variabili e roba lì).

Dovrebbe essere cancellato dalla memoria o la sua come funziona Android? Mi pare di capire è finito il ciclo di vita della attività.

E se si mantiene l'applicazione in memoria in modo che sia più veloce della seconda volta che l'utente lo usa, che tipo di oggetti posso lasciare in memoria di riutilizzare? Se ho capito bene, mi immagino di cancellare tutto sul OnDestroy.

È stato utile?

Soluzione

Android mantiene i processi in giro nel caso in cui l'utente vuole riavviare l'applicazione, questo rende la fase di avvio più veloce. Il processo non sarà fare nulla e se la memoria ha bisogno di essere bonificata, il processo sarà ucciso. Non ti preoccupare:)

Altri suggerimenti

Il modo migliore è prima di tutto utilizzare finish() e dopo che l'uso System.exit(0) per cancellare le variabili statiche. Essa vi darà un po 'di spazio libero.

Un sacco di applicazioni lasciano processi di lavoro e le variabili che cosa mi fa arrabbiare. Dopo 30 minuti di utilizzo di memoria è piena e devo correre Task Manager - Lvl 2 cancellazione della memoria

La sua non è vero che è cousing problemi che ho provato per oltre 3 anni nelle mie applicazioni. Non vengono mai andato in crash o il riavvio dopo l'utilizzo Exit()

Prova a usare

System.exit (0);

Una volta OnDestroy () viene chiamato, la vostra attività è destinata. Periodo.

Detto questo, il processo (e quindi lo spazio di indirizzi) allocato per l'applicazione potrebbe essere ancora in uso da un'altra parte dell'applicazione - un'altra attività o servizio. E 'anche possibile che il processo è vuota e il sistema operativo semplicemente non ha ottenuto intorno ad esso ancora bonifica; non è immediato.

Si veda il documento Process Lifecycle per ulteriori informazioni:
http://developer.android.com/reference/android/app/ Activity.html # ProcessLifecycle

Indipendentemente da ciò, se la vostra attività è rilanciata, dovrà passare attraverso l'intera sequenza di avvio di nuovo, a partire da onCreate (). Non date per scontato che tutto può essere riutilizzato in modo implicito.

Se è necessario chiudere un'applicazione da sottoattività, posso suggerire di fatta in modo tale: 1) da attività Un'attività chiamata B come startSubActivity (intento, REQUEST_CODE);

Intent intent = new Intent()
            .setClass(ActivityA.this, ActivityB.class);
            startActivityForResult(intent, REQUEST_CODE);

2) in attività di A si dovrebbe aggiungere il metodo:

protected void onActivityResult(int requestCode, int resultCode,
        Intent data) {
    if (requestCode == REQUEST_CODE) {
        if (resultCode == RESULT_CLOSE_APPLICATION) {
            this.finish();
        }
    }
}

3) in attività di finitura B chiamata:

this.setResult(RESULT_CLOSE_APPLICATION);
this.finish();

Come una soluzione rapida è possibile utilizzare il seguente per uccidere il vostro app:

android.os.Process.killProcess(android.os.Process.myPid());

Ma io non consiglierei questo per le applicazioni commerciali, perché va contro come funziona il sistema di gestione della memoria di Android.

questa presentazione da Google I / O 2008 Fine dovrebbe anche causare il processo di essere ucciso, ma ho scritto una rapida applicazione per verificare questa e su Android 1.5 non lo fa.

Come ha detto Romain (che è tra l'altro un ingegnere UI Toolkit per Android), il processo sarà solo stare lì senza far nulla in ogni modo, quindi è nulla di cui preoccuparsi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top