public static variable oder verwenden Sie die putExtra-Methode der Intent-Klasse

8

Ich habe hier eine allgemeine Frage zur Leistung und welche sollte ich tun und welche ich nicht verwenden sollte. Ich verwende tatsächlich in meiner App zwei Aktivitäten, lassen Sie uns "theFirst" und "theSecond" -Aktivität aufrufen.

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

Wenn ich die zweite Aktivität anrufe, möchte ich den Inhalt dieser Liste erhalten. 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 denke.

Oder soll ich die gesamte Liste berechnen und die Informationen auf einen großen String setzen und mit der putExtra-Methode an die zweite Aktivität senden?

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

    
TiagoM 10.03.2013, 13:00
quelle

2 Antworten

11

Die Verwendung von statischen Variablen wird nicht empfohlen. Statische Variablen werden in einem Abschnitt PermGen des Heapspeichers 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 Collections erfasst. 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 unbemerkt gesammelt 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. 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. Ссылка . Der Typ spricht über die Verwendung von MAT Analyzer, um nach Speicherlecks zu suchen.

Sehen Sie sich auch diesen Link an. Ссылка .Schauen Sie sich die Details unter der Überschrift * Wie mache ich Daten zwischen Aktivitäten / Diensten in einer einzigen Anwendung weitergeben?.

    
Raghunandan 10.03.2013, 13:10
quelle
1

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

Besser putExtra nicht wirklich als String verwenden, sondern auch putExtra für das Parselable- oder Serializable-Objekt betrachten. finden Sie hier für serializable

    
madlymad 10.03.2013 13:05
quelle