[android] Come uccidere un'applicazione con tutte le sue attività?



Answers

Hai ragione: chiamare finish() uscirà solo dall'attività corrente, non dall'intera applicazione. tuttavia, esiste una soluzione per questo:

Ogni volta che si avvia un'attività, avviarla utilizzando startActivityForResult(...) . Quando vuoi chiudere l'intera app, puoi fare qualcosa del genere:

setResult(RESULT_CLOSE_ALL);
finish();

Quindi definire il onActivityResult(...) ogni attività in modo che quando un'attività ritorna con il valore RESULT_CLOSE_ALL , chiama anche finish() :

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    switch(resultCode)
    {
    case RESULT_CLOSE_ALL:
        setResult(RESULT_CLOSE_ALL);
        finish();
    }
    super.onActivityResult(requestCode, resultCode, data);
}

Ciò causerà un effetto a cascata che chiude tutte le attività.

Inoltre, supporto Commons Commons nel suo suggerimento: memorizzare la password in una variabile in modo che venga distrutta quando l'applicazione viene chiusa.

Question

Possibile duplicato:
Chiusura di una domanda - è disapprovato?

Voglio offrire all'utente un'opzione per uscire dall'applicazione poiché ho bisogno di cancellare alcuni dati sensibili, che sono memorizzati nelle SharedPreferences a patto che l'applicazione ne abbia bisogno.

Non appena l'utente vuole uscire, la password in SharedPreferences deve essere cancellata e, naturalmente, tutte le attività dell'applicazione devono essere chiuse (non ha senso eseguirle senza la password conosciuta - si bloccherebbero).

Come lo posso fare?

System.exit(0) e finish() abbandonano solo l'attività corrente - inutile. So che c'è un'app taskmanager. Come lo sta facendo? È in grado di uccidere l'intera applicazione ...




La mia comprensione del framework dell'applicazione Android è che questo non è specificamente consentito. Un'applicazione viene chiusa automaticamente quando non contiene più attività correnti. Cercare di creare un pulsante "uccidi" è apparentemente contrario alla progettazione prevista del sistema applicativo.

Per ottenere il tipo di effetto desiderato, è possibile avviare le varie attività con startActivityForResult () e fare in modo che il pulsante di uscita restituisca un risultato che indica all'attività padre di terminare (). Quell'attività potrebbe quindi inviare lo stesso risultato come parte del suo onDestroy (), che ricondurrebbe all'attività principale e non comporterebbe alcuna attività in esecuzione, che dovrebbe causare la chiusura dell'app.




che è memorizzato in SharesPreferences fintanto che l'applicazione ne ha bisogno.

Perché?

Non appena l'utente vuole uscire, la password in SharedPreferences deve essere cancellata e, naturalmente, tutte le attività dell'applicazione devono essere chiuse (non ha senso eseguirle senza la password conosciuta - si bloccherebbero).

Ancora meglio: non inserire la password in SharedPreferences . Trattenerlo in un membro dati statico. I dati scompariranno naturalmente quando tutte le attività nell'app verranno abbandonate (ad esempio, il pulsante INDIETRO) o altrimenti distrutte (ad es., Estratte dalla RAM per fare spazio ad altre attività qualche volta dopo che l'utente ha premuto HOME).

Se si desidera una sorta di "flush password" proattiva, basta impostare il membro dei dati statici su null e fare in modo che le attività controllino quel membro e prendano l'azione appropriata quando è null .




Related



Tags

android android   kill