2011-11-11 16 views

risposta

7

Non penso che ci sia alcun modo in cui qualsiasi processo in background dannoso possa ottenere dai dati del bundle dell'applicazione. Non è documentato in che modo Android tratti i dati del pacchetto. Può o meno essere scritto su disco nel caso in cui la tua app venga pulita, mentre in background. Tuttavia, dato che non sappiamo se questi dati sono salvati su disco, e se lo è, visto che non abbiamo idea di dove, e quasi certo in effetti non ho accesso in lettura a quella parte del disco, non mi preoccuperei che alcuni processi di terze parti possano recuperare quei dati.

Di conseguenza non sono chiaro cosa si possa pensare che l'esposizione sia.Per quanto possa mancare qualcosa. Tuttavia, in risposta alla tua domanda, è assolutamente in memoria mentre la tua app è attiva, e se la tua app è in background può o non può essere scritta da qualche parte nascosta, ma non lo sappiamo perché Google non ci ha detto.

Viene distrutto insieme all'applicazione quando viene raccolta la memoria.

+0

Grazie è esattamente quello che volevo sapere – Jleuleu

+2

Questa è una risposta imprecisa. Considera il caso in cui il processo dell'app viene ucciso automaticamente dal sistema operativo (mentre l'app è in background) e l'utente torna all'app, quindi il sistema operativo ripristina l'app (crea un nuovo processo e ripristina lo stack delle attività). Nonostante il processo app non fosse presente da un po 'di tempo, il pacchetto viene fornito a un'attività ripristinata, quindi è stato in qualche modo memorizzato da qualche parte all'interno del sistema. A sua volta, il sistema non stabilisce esattamente come memorizza i bundle, quindi in teoria potrebbe usare il filesystem. –

+1

Puoi anche controllare la risposta relativa da CommonsWare: http://stackoverflow.com/a/12468776/247013 –

1

La mia ipotesi sarebbe in memoria, ma il modo migliore per proteggere i dati non è quello di fidarsi del sistema e crittografarlo. Non fidarti mai del client (in questo caso il client è il sistema operativo).

EDIT:

Per essere chiari, non sto dicendo crittografare il bundle. Piuttosto sto dicendo che qualsiasi dato sensibile non dovrebbe essere inserito nel pacchetto. Se si deve inserire i dati personalizzati nel pacchetto, quindi crittografarlo.

Ma alla fine si dovrebbe mantenere il minor numero possibile di dati sensibili sul client. Questa è la stessa ragione per cui un sito di e-commerce mostrerebbe solo le ultime 4 cifre di una carta di credito.

+0

Android utilizza 'onSaveInstanceState' /' onRestoreInstanceState' per mantenere lo stato dell'interfaccia utente di ogni vista quando il sistema uccide un'attività che potrebbe dover essere ripristinata in futuro (ad esempio, su rotazione dello schermo o memoria insufficiente). Se si desidera veramente crittografare tali informazioni (non lo si fa), sarà necessario salvare e ripristinare tutte le informazioni di stato per tutte le visualizzazioni. Non riesco a pensare a nessuna applicazione in cui il nome del campo di testo che ha il focus è qualcosa che avresti bisogno di criptare ... – user113215

+0

Non sto dicendo di cifrare il pacchetto. Piuttosto sto dicendo che qualsiasi dato sensibile non dovrebbe essere inserito nel pacchetto. Se è necessario inserire dati personalizzati nel pacchetto, quindi crittografarlo. – pjco

8

Per memorizzare i dati solo per il corso della vita di applicazione (cioè temporaneamente), utilizzare l'evento onSaveInstanceState (Bundle) attività

Questi dati si terranno solo in memoria fino a quando l'applicazione è chiusa, i dati saranno disponibile ogni volta che questa attività inizia nel corso della vita corrente dell'applicazione.

Spiegazione: se i dati vengono memorizzati qui dall'attività A quindi l'applicazione mostra un'altra attività o ruota schermo (quindi di chiusura A) e quindi ritorna alla AI dati possono essere recuperati per popolare i controlli. Tuttavia, se l'applicazione viene chiusa e riaperta, i dati verranno eliminati e i controlli torneranno ai valori predefiniti.

Esempio di utilizzo: il testo memorizzare digitato dall'utente e le selezioni che costituiscono un ordine, blog, messaggi, ecc ...

Nota:

E 'importante notare che solo l'attività viene distrutto e ricreato, non la tua intera applicazione! Un'applicazione Android può essere composta da molte attività, servizi e ContentProvider! Se l'applicazione viene chiusa (ad esempio premendo il pulsante "Indietro", tutti i valori saranno persi. Il valore salvatoInstaceState è solo lì per conservare i dati temporanei quando un'attività viene distrutta/ricreata, non l'applicazione stessa.

desidera conservare i dati in modo permanente, è necessario salvarli come preferenze o in un ContentProvider/database

+0

Grazie, volevo solo sapere che i dati sono conservati in memoria. – Jleuleu

Problemi correlati