Domanda

Ho un paio di oggetti che voglio passare ad altre attività attraverso intenti. Tuttavia, hanno solo bisogno di essere copie poco profonde della altro oggetto, in quanto sono solo andando a leggere (e anche se stavano per essere modificato, vorrei li modificati nell'attività originale troppo), quindi non c'è nessun punto in facendo l'oggetto di una serializzabile, anche perché non tutti i campi nell'oggetto sono serializzabile, non riesco nemmeno a farlo.

Inoltre, sembra che lo rende Parcelable avrebbe incontrato gli stessi problemi. Certo, sembra che posso aggiungere alcuni dei campi in esso come oggetti attivi, ma non riesco a rendere il tutto solo una copia.

Quindi non v'è un modo per fare una copia di un oggetto in un intento, o qualsiasi altro modo di passare una copia dei dati da un'altra attività, come si farebbe normalmente passare un parametro in java? Grazie.

È stato utile?

Soluzione

JesusFreke è corretto che non si può passare un riferimento (puntatore) ad un oggetto tramite un Intent. L'intento è destinato a essere serializzato dati non un riferimento a tali dati. Tuttavia, mi sento di raccomandare contro la tecnica mappa statica in quanto è spesso fonte di perdita di memoria. Invece mi sento di raccomandare la creazione di una sottoclasse di android.app.Application e usarlo per memorizzare i riferimenti a strutture di qualsiasi dato che avete bisogno di condividere attraverso attività.

Altri suggerimenti

Quando si invia un intento, l'intento e tutti i dati ad esso associati deve essere marshalling oltre i limiti del processo. L'unico modo questo può verificarsi è se l'oggetto è parcelable.

Tuttavia, se il codice che invia il nuovo intento è nello stesso processo come l'attività che viene avviato dal intenti, si potrebbe fare qualcosa di simile a creare una mappa statica per contenere i dati che si desidera inviare al nuova attività, e poi passare una chiave per i dati che nell'intento, con la quale la nuova attività può cercare i dati dalla mappa.

Tuttavia, la mia unica preoccupazione con questo tipo di approccio è che è possibile che si invia un intento, e quindi gli stampi processo prima la nuova attività viene avviato. E allora il processo viene riavviato per la nuova intenti, ma poi i dati che aveva immagazzinato nella mappa è ovviamente andato. Direi che questo sarebbe probabilmente un evento molto raro però.

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