2010-12-26 10 views
2

Ich habe ein paar Objekte, die ich an andere Aktivitäten über Intents übergeben möchte. Allerdings müssen sie nur flache Kopien des anderen Objekts sein, da sie nur gelesen werden (und selbst wenn sie geändert werden würden, würde ich auch wollen, dass sie in der ursprünglichen Aktivität modifiziert werden), also macht es keinen Sinn das Objekt serialisierbar zu machen, auch weil nicht alle Felder im Objekt serialisierbar sind, kann ich nicht einmal machen.Shallow Kopie eines Objekts in einer Absicht in Android

Auch scheint es, als würde es parzellierbar machen würde in die gleichen Probleme laufen. Sicher, es scheint, als ob ich einige der Felder darin als aktive Objekte hinzufügen könnte, aber ich kann das Ganze nicht nur als oberflächliche Kopie erstellen.

Also gibt es eine Möglichkeit, eine flache Kopie eines Objekts in einer Absicht oder auf andere Weise eine flache Kopie von Daten an eine andere Aktivität zu übergeben, wie Sie normalerweise einen Parameter in Java übergeben würde? Vielen Dank.

Antwort

1

JesusFreke ist korrekt, dass Sie eine Referenz (Zeiger) nicht über eine Absicht an ein Objekt übergeben können. Eine Absicht sind serialisierte Daten, die nicht auf diese Daten verweisen. Ich würde jedoch gegen die statische Karten-Technik empfehlen, da es oft eine Quelle von Speicherlecks ist. Stattdessen würde ich empfehlen, eine Unterklasse von android.app.Application zu erstellen und diese zu verwenden, um Verweise auf alle Datenstrukturen zu speichern, die Sie für alle Aktivitäten freigeben müssen.

+0

Alles klar, danke. Ich habe schließlich nur die ID des Objekts übergeben und erneut aus der Datenbank abgefragt. Danke für die nützlichen Informationen. Traurig, dass es keine (stabile) Möglichkeit gibt, einen Zeiger zu umgehen. –

1

Wenn Sie eine Absicht senden, müssen die Absicht und alle damit verknüpften Daten über Prozessgrenzen hinweg gemarshallt werden. Dies kann nur auftreten, wenn das Objekt parzellierbar ist.

Wenn der Code, der die neue Absicht sendet, sich jedoch im selben Prozess befindet wie die Aktivität, die von der Absicht gestartet wird, können Sie beispielsweise eine statische Zuordnung für die Daten erstellen, an die Sie senden möchten die neue Aktivität und dann einen Schlüssel an die Daten in der Absicht übergeben, mit denen die neue Aktivität die Daten aus der Karte nachschlagen kann.

Allerdings ist meine einzige Sorge mit dieser Art von Ansatz, dass es möglich ist, dass Sie eine Absicht senden, und dann stirbt der Prozess, bevor die neue Aktivität gestartet wird. Und dann wird der Prozess für die neue Absicht neu gestartet, aber dann sind die Daten, die Sie in der Karte gespeichert hatten, offensichtlich verschwunden. Ich würde vermuten, dass dies wahrscheinlich ein sehr seltenes Ereignis wäre.

Verwandte Themen