Pass Objekt-Referenz innerhalb der Vorsatz ohne die Implementierung von Serializable oder Parcelable
Ich weiß, ähnliche Fragen wurden gefragt, mehrere Male. Ich denke, ich lese das meiste. Aber keine Antwort ist zutreffend.
Muss ich weiterleiten von komplexen Objekten, die über Intents (Aktivität ruft/Sendungen). Alles wird getan, in meinem Prozess. Deshalb sehe ich keinen Grund zu schreiben, dass meine Objekte in Streams nur wieder zusammenbauen, Sie ein paar Millisekunden nach. Ich möchte mein Objekt Referenz durch meine Anwendung. Gibt es eine Möglichkeit, dies zu tun.
Da meine Anwendung übertragen das gleiche Ereignis mehrere Male hintereinander ich kann nicht Sie verlassen sich auf statische Elemente. Ich brauche, um genau die gleiche Objekt, für das, was ich ausgestrahlt.
Deshalb dachte ich über ein statisches "Referenceholder" wird akzeptieren, dass ein Objekt und eine ganze Zahl zurück, die identifiziert dieses Objekt in seiner internen Liste, so kann ich diese übergeben integer über .putExtras. Aber soweit ich weiß, von Java konnte ich nicht reinigen, bis das Objekt aus dieser Liste, nachdem es Hinzugefügt wurde, weil mehrere Zuhörer könnte interessted in den gleichen Gegenstand, und ich würde, um es zu halten in meinem Referenceholder für immer (unter der Annahme, dass ein thread kann jederzeit fortgesetzt werden - sogar 2 Minuten später).
Irgendwelche Ideen? Mache ich etwas falsch? Oder irgendwelche Ideen wie ich das bereinigen kann meine referneces (wahrscheinlich nach einigen Sekunden? dies kann zu einem Absturz führen, aber es scheint mehr anwendbar, als das schreiben von code, der baut und baut meine Objekte ohne Grund)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre Optionen sind ziemlich klar: Es gibt keinen Weg, um eine un-marshallable Objekt (Parcelable, Serializable) im Vorsatz. Full stop.
Dem, was Sie vielleicht in der Lage zu tun, um die Weitergabe von etwas, das ist ein Verweis auf ein un-marshallable Objekt. Die Idee ist, dass Sie tun würde, etwas auf die Reihenfolge der übergabe einen Schlüssel, um eine Karte, die Karten die Taste, um den Wert, den Sie interessiert sind vorbei. Wenn beide die Absicht Absender und die Absicht, Empfänger haben Zugriff auf die Karte, die Sie kommunizieren können, einen Verweis auf die un-marshallable Objekt.
Ich verstehe nicht genau, warum Sie denken, statische member sind nicht, was Sie wollen. Ich würde vermuten, dass eine statische Karte, die in einer benutzerdefinierten Anwendung-Objekt, wäre so ziemlich genau das, was Sie wollen. ... und ich vermute, aus deinem Kommentar über WeakHashMaps, dass Sie entdeckt haben, genau das.
... außer, dass nichts, was Sie gesagt haben, so weit erklärt, warum Sie möchten, um Ihre Karte zu Schwach. Bevor Sie eine Schwache Karte, haben Sie einen Blick auf Soft-Referenzen, um sicherzustellen, dass das ist nicht, was Sie bedeuten.
Viel Glück
Globals.object = objectIWantToPass;
und dannActivityB.onCreate()
hatObject myObject = Globals.object; Globals.object = null;
EDIT:
Vergessen Sie diese Lösung. Es funktioniert nicht. Android ist coping die Absicht, die Sie übergeben .startActivity(). Es gibt keinen Weg, um jede Referenz innerhalb einer Aktivität. Dies ist - meiner Meinung nach - große bu****t meine durch google. Sie nennen Ihre Tätigkeit und Ort der referneces des Objekts in statischen Mitglieder...
Als metioned von G. Blake Meike, es ist kein Weg zu passieren Objekt-Referenzen in Android über Intents. Aber vielleicht können Sie verwenden WeakReferences.
Sehr vorzüglich gegebenenfalls Artikel zu diesem Thema ist hier zu finden:
http://weblogs.java.net/blog/2006/05/04/understanding-weak-references
Lernte ich, dass die Lösung durch diese Frage:
Ist es möglich, den Objekt-Referenz zählen?
So, was ich im Grunde tun ist:
Ich verwende Absichten als Schlüssel für eine WeakHashMap und pass mein Objekt als Wert. Dies scheint der einzige Gegenstand, der geeignet ist, als Schlüssel, da alles was Sie in die Absichten extras serialisiert werden. Aufgrund, dass, Sie können nur ein Objekt pro Absicht. Könnten Sie implementieren die Unterklassen innerhalb Ihrer Unternehmung, die halten Sie Ihre Objekte und schiebt diese Unterklasse in der Karte statt. Aber ich bin mir immer noch nicht sicher, ob das Intent-Objekt, das einen Empfänger erhalten die gleiche, die der Anrufer erstellt, aber ich denke so. Wenn es nicht ist, werde ich Bearbeiten diese Lösung (oder vielleicht könnte jemand klar, dass up).
WeakReference
arbeiten. DieSerializable
/Parcelable
Anforderung bedeutet, daß es einen fundamentalen zugrunde liegenden Forderung das Objekt ist tief, kopiert von einem Ort zum anderen. Das impliziert, dass jede form von Referenz übergeben wird nicht funktionieren, z.B. weil wir ein Gespräch über unterschiedliche Speicher Adressräume. Und selbst wenn es funktioniert, ist das Grundprinzip muss sein, dass gemeinsame Bezüge zwischen Instanzen einer app ist schlecht für andere Gründe.