Ich verstehe, dass Android Activities
bestimmte Lebenszyklen hat und onCreate
diese überschrieben und für die Initialisierung verwendet werden sollten, aber was genau passiert im Konstruktor? Gibt es Fälle, in denen Sie den Activity
Konstruktor ebenfalls überschreiben könnten / sollten oder ihn niemals berühren sollten?
Ich gehe davon aus, dass der Konstruktor niemals verwendet werden sollte, da Verweise auf Activities
nicht vollständig bereinigt werden (was den Garbage Collector behindert) und das onDestroy
zu diesem Zweck vorhanden ist. Ist das richtig?
java
android
garbage-collection
android-activity
oncreate
vergöttern
quelle
quelle
Antworten:
Ich kann mir keinen guten Grund vorstellen, irgendetwas im Konstruktor zu tun. Sie erstellen eine Aktivität niemals direkt, sodass Sie sie nicht zum Übergeben von Parametern verwenden können. Im Allgemeinen erledigen Sie die Dinge einfach in onCreate.
quelle
Ein guter Grund, Dinge in den Konstruktor zu setzen, wie Gilis Kommentar angegeben hatte, ist die Verwendung von Endfeldern.
Wenn Sie jedoch Dinge im Konstruktor initialisieren, wird die Lebensdauer des Objekts etwas länger sein, obwohl ich nicht viel darüber nachdenke, da das
onCreate
kurz danach aufgerufen werden würde.Obwohl dies gegen mein Ideal verstößt, vermeide ich den Konstruktor für die Initialisierung der Aktivitätsmitglieder und verlasse mich auf
onResume()
undonPause()
für Ressourcen, mit denen meine App zu tun hat.Für
onCreate()
Ich benutze es in der Regel Ansicht Mapping auf lokale Variablen zu tun. Obwohl Android-Annotations dies bereits für mich tun, habe ich selten eineonCreate()
Methode für meine Aktivität. Ich benutze es trotzdem im Service.Wenn Sie sich jedoch die Mitglieder ansehen, werden Sie möglicherweise initialisiert
Sie hätten eine "close" -Methode, die Sie zum richtigen Zeitpunkt aufrufen müssen (onResume oder onPause).
Sie sind Teil der Ansicht, dh sie muss initialisiert und dann onCreate aufgerufen werden
Es sind Konstanten, die sowieso nicht in den Konstruktor eingefügt werden müssen, nur ein statisches Finale würde ausreichen. Dies umfasst Paint- und Path-Konstanten, die von einem statischen Block initialisiert werden können
quelle
Ich bin jetzt in einem Fall, der den Konstruktor überschreiben muss. In der Tat habe ich einige Aktivitäten, die die gleiche Struktur haben. Anstatt viele Aktivitäten zu erstellen, erstelle ich eine "Master" -Aktivität und die anderen erben diese. Daher muss ich den Konstruktor der untergeordneten Aktivität überschreiben, um einige Variablen initialisieren zu können, die in den oncreate-Methoden verwendet werden.
Mit zwei Worten, der Konstruktor lässt Sie eine "Masteraktivität" simulieren, die durch Vererbung wiederverwendet werden kann!
quelle
Sie müssen den Konstruktor überschreiben, wenn Ihre Aktivität benutzerdefinierte Parameter enthält oder Sie Aufrufe von Klassen verfolgen möchten, von denen geerbt wurde.
quelle
startActivityForResult
muss ich einen privaten Konstruktor in meine benutzerdefinierte Komponente aufnehmen, auch wenn diese Aktivität niemals gestartet wird und keine sichtbaren Elemente enthält, verwende ich nur das Ergebnismaterial.