Ich möchte eine APP schreiben, um den Bildschirm aufzuzeichnen, es gibt zwei Wege, RecordHelper_Method_A und RecordHelper_Method_B.
In RecordHelper_Method_A definiere ich mMediaRecorder, MediaProjection mMediaProjection und mVirtualDisplay als statische Variable, die einfach aufgerufen werden kann, zB StartRecord( mContext, requestCode, resultCode,data)
, StopRecord()
.
und in RecordHelper_Method_B muss ich mMediaRecorder, MediaProjection mMediaProjection in der Hauptaktivität-Klasse definieren und die Parameter übergeben, wenn ich StartRecord(mMediaRecorder, mMediaProjection,mVirtualDisplay)
, 'StopRecord (mMediaRecorder, mMediaProjection, mVirtualDisplay)' anrufe ..., es ist ein wenig komplex.
Ich weiß nicht, welcher ist der bessere, und mehr ich weiß nicht, ob diese statische var in RecordHelper_Method_A korrekt freigegeben werden kann, wenn ich die APP beende.
Übrigens, wenn Sie den besseren Weg haben, würden Sie mir bitte sagen? Danke!
RecordHelper_Method_A
%Vor%RecordHelper_Method_B
%Vor% Ich würde vorschlagen Objects
nicht leben statically
. Welches Objekt oder welche Ressource Sie auch immer erstellen, sollte sterben, wenn die Aktivität abbricht. Es ist also gut, diese Ressourcen in der Aktivität zu erstellen und dann zu übergeben.
Ich sehe auch, dass die Methoden in beiden Methoden, die Sie vorgeschlagen haben, selbst statisch sind. Es ist besser, ein Objekt für die Klasse zu erstellen und dann die Ressourcen an dieses Objekt weiterzugeben. Dies würde versehentliche Speicherlecks verhindern. Sie könnten so etwas in Ihrer Aktivität tun.
%Vor% Das hält die Dinge einfach. Sobald Ihr Activity
stirbt, wird auch das helper
-Objekt. So werden alle Ressourcen sicher freigegeben.
Wenn Sie statische Funktionen verwenden möchten, sollten Sie statische Variablen generell nicht von außen definieren. Dies führt zu einer Verschlechterung der Leistungen. Außerdem sollte eine statische Methode von "sich selbst" für Lisibility und Wartung ausreichen.
Da wir uns im Android-Kontext befinden, können Sie diesen Artikel für weitere Details / Tipps lesen: Ссылка
Dependency Injection ist immer besser (Sie sehen den Namen classic). Lassen Sie also die statischen Variablen los und suchen Sie nach einer Möglichkeit, Ihre Methoden usw. zu füttern.
Dies bedeutet mehr Wiederverwendbarkeit Ihres Codes, mehr Lesbarkeit, weniger Lebensdauer von Objekten - wie sie sterben, wenn die Methode fertig ist, etc usw.
Wenn statische Variablen vorgeschlagen werden, dann warum wurden sie eingeführt? Hallo Leute, ich denke, es geht darum, aus Erfahrung zu lernen, wie man statische Variablen verwendet und sie effektiv behandelt. Ich möchte nur sagen, dass es nicht einfach so ist, da die Verwendung von statischer Elektrizität schädlich sein kann, anstatt sie zu benutzen, ohne zu wissen, dass dies schädlich ist. :)
Statische Variablen sind in Ordnung, wenn sie keinen änderbaren Zustand enthalten (dh Konstanten oder schreibgeschützte Werte). Ansonsten sind sie globale Variablen und ihre Verwendung wird daher als schlechte Praxis angesehen. Warum?
Aus Wikipedia oder aus Böse statische Variablen :
Selbst statisches Verhalten kann problematisch sein, wenn es sich auf eindeutige Ressourcen bezieht und dann nicht gemeinsam nutzbar und testbar ist (Datenbank, Dateisystem, Sockets, etc ...)