Passare dati di tipo non primitivo tra le attività in Android
-
10-07-2019 - |
Domanda
Supponi di voler iniziare una nuova attività e passargli alcuni dati dall'attività corrente. Se i dati sono di tipo primitivo, potresti semplicemente usare un intento e aggiungere extra, ma come faresti per strutture di dati più complesse come gli array o gli oggetti?
Soluzione
Hai alcune opzioni:
- Potresti avvolgere la struttura più complessa in una classe che implementa l'interfaccia
Parcelable
, che può essere memorizzata in un extra - Potresti avvolgere la struttura più complessa in una classe che implementa l'interfaccia
Serializable
, che può essere memorizzata in un extra - Utilizzi membri di dati statici per passare informazioni, poiché sono tutti nello stesso processo
- Utilizzi memoria esterna (file, database,
SharedPreferences
) - Come notato dalla persona che ha appena pubblicato, usa un componente comune, come un
Applicazione
o unService
locali
Quello che non vuoi fare è passare grandi cose tramite extra. Ad esempio, se si sta creando un'applicazione che cattura le immagini dalla fotocamera, non si desidera passare quelle negli extra: utilizzare un membro di dati statici (icky come sembra). Gli intenti sono progettati per funzionare tra processi, il che significa che c'è una quantità di copia dei dati che continua, che si desidera evitare quando non è necessario per grandi cose.
Altri suggerimenti
Un'opzione di cui sono a conoscenza è l'archiviazione dei dati che stai utilizzando in un oggetto Applicazione che tutte le tue attività possono recuperare dal contesto.
Ho anche sentito parlare dell'utilizzo di Buffer di protocollo di Google per raggiungere una soluzione dalle prestazioni più elevate