2013-03-10 8 views
8

Ich habe eine allgemeine Frage hier über die Leistung und die von denen soll ich tun, und die ich nicht verwenden. Ich verwende tatsächlich in meiner App zwei Aktivitäten, nennen wir "theFirst" und "theSecond" -Aktivität.public static Variable oder verwenden putExtra Methode Absichts Klasse

In der ersten Aktivität habe ich ein öffentliches statisches Objekt, in meinem Fall ist es eine Liste von einem benutzerdefinierten Objekt namens Conjunction.

Wenn ich die zweite Aktivität aufrufen möchte ich den Inhalt dieser Liste abrufen. Also sollte ich die öffentliche statische Variable verwenden? gibt es ein Problem? Es wird nur eine Instanz des ersten Aktivitätsrechts geben? Also kein Problem mit öffentlichen statischen Variablen ..? Ich vermute.

Oder sollte ich die gesamte Liste berechnen und die Informationen auf eine große Zeichenfolge setzen und sie mit der putExtra-Methode an die zweite Aktivität senden?

Eine gute Erklärung dazu wäre sehr gut, und ich würde wirklich zu schätzen es :)

+2

die Singletonmuster Verwendung ist im Allgemeinen besser als öffentliche statische Felder. –

Antwort

11

Die Verwendung von statischen Variablen wird nicht empfohlen. Statische Variablen werden in einem PermGen Abschnitt des Heap gespeichert. Selbst wenn die Klasse fertig ist, bleiben die statischen Variablen im Heap. Der Garbage Collector markiert und wobbelt. Wenn Sie eine statische Variable in der ersten Aktivität haben, auf die in der zweiten Aktivität verwiesen wird, bleibt die Verknüpfung lang. Sie können Speicherverluste erhalten, wenn Sie mehr statische Variablen verwenden. Reduzieren Sie auch die Verwendung unnötiger Objekte.

Statische Variablen werden von Klassenobjekten referenziert, auf die von ClassLoaders verwiesen wird. Wenn der ClassLoader die Klasse nicht irgendwie ablegt oder der ClassLoader selbst für die Garbage Collection geeignet wird, werden die statischen Variablen nicht als Garbage Collected behandelt. Wenn Sie also statische Variablen verwenden, die in vielen Klassen referenziert werden, können diese Klassen und die Klasse, in der statische Variablen deklariert sind, nur dann als Garbage Collection betrachtet werden, wenn diese Klassen für die Garbage Collection verfügbar sind. Dies führt zu einer Speichererweiterung, die zu Speicherlecks führt.

Ich empfehle puExtra für Primitive Typen verwenden. In Ihrem Fall sollte die Verwendung von Singleton helfen.

In diesem Video spricht der Typ darüber, warum statische Variablen nicht verwendet werden sollten und wie man Speicherlecks vermeiden kann. http://www.youtube.com/watch?v=_CruQY55HOk. Der Typ spricht über die Verwendung von MAT Analyzer, um nach Speicherlecks zu suchen.

haben auch einen Blick auf diesen Link. http://developer.android.com/guide/faq/framework.html .Haben Sie einen Blick auf die Details unter der Überschrift * Wie gebe ich Daten zwischen Aktivitäten/Services innerhalb einer einzigen Anwendung ?.

+1

Der letzte Link hat sehr gute Informationen, danke für den Austausch. Ich benutze jetzt putExtra, ich berechne die Zeichenfolge dann lege ich die Zeichenfolge mit putExtra, und dann rufe ich die Aktivität. Ich denke, es ist eine gute Lösung für jetzt :) Danke Kumpel;) – TiagoM

+1

Froh, dass es dir geholfen hat. – Raghunandan

1

public static ist keine gute Idee. "theFirst" -Aktivität kann in einigen Fällen vom System beendet werden. Durchkommen: Activity Lifecycle kann Ihnen helfen, wie Aktivität funktioniert.

Besser verwenden Sie putExtra nicht wirklich als String, sondern auch auf putExtra für Parselable oder Serializable-Objekt. see here for serializable

+0

Acitivy Lifecycle hat eine Reihe von guten Informationen, ich nehme nur einen kleinen Vorgeschmack auf das, und ist sehr gut, vielen Dank Kumpel;) Ich verwende putExtra. danke;) – TiagoM

Verwandte Themen