2017-09-16 1 views
0

Ich wollte ein Objekt (hat mehrere Zustände) zwischen 3 Aktivitäten und jede der Aktivitäten kann den Objektstatus ändern und der gleiche Zustand sollte für alle 3 Aktivitäten zugänglich sein. Ich möchte kein Singleton-Objekt verwenden, da es für die gesamte Anwendung existieren wird. Shared-Objekt sollte nur bis zum Zeitpunkt dieser 3 Aktivitäten bestehen bleiben.Objet Sharing zwischen mehreren Aktivitäten

+0

Sie können ein Singleton-Objekt auf null setzen, wenn Sie es als Objekt wünschen, und es wird nicht für die gesamte Anwendung dauern. Eine andere Antwort ist die Verwendung eines Beobachtermusters oder einer EventBus-Bibliothek zum Senden und Empfangen von Informationen von anderen Aktivitäten oder Fragmenten. – Thracian

+0

Danke für die Antwort. Kannst du mir sagen, wie hilft Beobachtermuster hier? – Rahul

+0

EventBus ist eine Bibliothek, die Observer-Muster verwendet. Sie können nach EventBus Observer Muster suchen und Sie erhalten viele Artikel oder Beispiele. Sie können Observer-Muster implementieren, indem Sie für jede Aktivität eine Schnittstelle (Listener-Callback) implementieren und diese Aktivitäten über die Application-Klasse zur Liste der Listener hinzufügen (Namensregister (MyCallback-Callback)). Ja, es sollte Applcation sein, damit Listener oder Beobachter nicht null sind. onStart Hinzufügen (Registrieren) einer Aktivität zum Auflisten und OnPause Entfernen (Aufheben der Registrierung) einer Aktivität. Dies ist ein weit verbreitetes Muster, wie Sie vielleicht wissen, wenn Sie Observer-Muster kennen. – Thracian

Antwort

0

hi @rahul Sie können Parcelable in Ihrem Objekt implementieren und über Intent an alle Aktivitäten übergeben. Auf diese Weise können Sie Zustände beibehalten und Singleton vermeiden.

Da das Erstellen eines Objekts parcelable mehr Vorabcode erfordert, können Sie diese parceler Bibliothek verwenden, die keinen Standardcode benötigt. Nachdem ein Objekt parcel Sie, dass auf jede Aktivität über Intent wie diese

Intent intent = new Intent(this, MyActivity.class); 
intent.putParcelable("key", object_you_want_to_pass); 
... 
startActivity(intent); 
0

Wenn Ihr Objekt serialisiert werden passieren kann, vielleicht könnten Sie versuchen, SharedPreferences zu verwenden, spezifische Objekt zu speichern, eine der beschriebenen Methoden here. Sie können es dann analysieren und von jeder Aktivität abändern.

Wenn Sie möchten, dass es nur dann persistent ist, wenn alle drei Aktivitäten ausgeführt werden, löschen Sie einfach den Eintrag SharedPreferences.

0

Bei der Entwicklung Ihrer App sollten Sie es vermeiden, solche gemeinsamen Zustände zu erstellen, wenn dies möglich ist. Aber wenn Sie es wirklich brauchen - siehe unten.

Sie könnten ein Singleton mit Art „Referenzzählung“ erstellen - Self releasing (reference counting) singelton

Wenn Sie die Sichtbarkeit einschränken möchten, können Sie es zum Beispiel privat Paket (wenn Ihre Aktivitäten im selben Paket sind).

Aber diese ganze Sache sieht ein bisschen zu kompliziert für mich aus, ich würde wahrscheinlich mit normalen Singleton oder einem Feld in Ihrer Application-Klasse gehen, vielleicht manuell entfernen, wenn ich irgendwann weiß, dass es nicht mehr benötigt wird.

Verwandte Themen