CloseGuard Klasse

Definition

CloseGuard ist ein Mechanismus zum Kennzeichnen der impliziten Endisierung von Ressourcen, die durch explizite Close-Methoden bereinigt werden sollten (auch als "explizite Beendigungsmethoden" in "Effective Java").

[Android.Runtime.Register("android/util/CloseGuard", ApiSince=30, DoNotGenerateAcw=true)]
public sealed class CloseGuard : Java.Lang.Object
[<Android.Runtime.Register("android/util/CloseGuard", ApiSince=30, DoNotGenerateAcw=true)>]
type CloseGuard = class
    inherit Object
Vererbung
CloseGuard
Attribute

Hinweise

CloseGuard ist ein Mechanismus zum Kennzeichnen der impliziten Endisierung von Ressourcen, die durch explizite Close-Methoden bereinigt werden sollten (auch als "explizite Beendigungsmethoden" in "Effective Java").

Ein einfaches Beispiel:

{@code
              class Foo {

                  private final CloseGuard guard = new CloseGuard();

                  ...

                  public Foo() {
                      ...;
                      guard.open("cleanup");
                  }

                  public void cleanup() {
                     guard.close();
                     ...;
                     if (Build.VERSION.SDK_INT >= 28) {
                         Reference.reachabilityFence(this);
                     }
                     // For full correctness in the absence of a close() call, other methods may also need
                     // reachabilityFence() calls.
                  }

                  protected void finalize() throws Throwable {
                      try {
                          // Note that guard could be null if the constructor threw.
                          if (guard != null) {
                              guard.warnIfOpen();
                          }
                          cleanup();
                      } finally {
                          super.finalize();
                      }
                  }
              }
            }

Wenn die ressource, die explizit bereinigt werden soll, nach der Objektkonstruktion zugeordnet wird, kann der CloseGuard-Schutz zurückgestellt werden. Beispiel:

{@code
              class Bar {

                  private final CloseGuard guard = new CloseGuard();

                  ...

                  public Bar() {
                      ...;
                  }

                  public void connect() {
                     ...;
                     guard.open("cleanup");
                  }

                  public void cleanup() {
                     guard.close();
                     ...;
                     if (Build.VERSION.SDK_INT >= 28) {
                         Reference.reachabilityFence(this);
                     }
                     // For full correctness in the absence of a close() call, other methods may also need
                     // reachabilityFence() calls.
                  }

                  protected void finalize() throws Throwable {
                      try {
                          // Note that guard could be null if the constructor threw.
                          if (guard != null) {
                              guard.warnIfOpen();
                          }
                          cleanup();
                      } finally {
                          super.finalize();
                      }
                  }
              }
            }

Bei Verwendung in einem Konstruktor sollten Aufrufe open am Ende des Konstruktors erfolgen, da eine Ausnahme, die zu einer abrupten Beendigung des Konstruktors führen würde, bedeuten, dass der Benutzer keinen Verweis auf das Objekt hat, um explizit zu bereinigen. Bei Verwendung in einer Methode sollte der Aufruf open unmittelbar nach dem Ressourcenerwerb erfolgen.

Java Dokumentation für android.util.CloseGuard.

Teile dieser Seite sind Änderungen auf der Grundlage von Arbeiten, die von der Android Open Source Project erstellt und gemeinsam verwendet und gemäß den in der 2.5 Attribution License beschriebenen Begriffen verwendet werden.

Konstruktoren

Name Beschreibung
CloseGuard()

Erstellt eine neue CloseGuard-Instanz.

Eigenschaften

Name Beschreibung
Class

Gibt die Laufzeitklasse dieses Werts Objectzurück.

(Geerbt von Object)
Handle

Das Handle für die zugrunde liegende Android-Instanz.

(Geerbt von Object)
JniIdentityHashCode

CloseGuard ist ein Mechanismus zum Kennzeichnen der impliziten Endisierung von Ressourcen, die durch explizite Close-Methoden bereinigt werden sollten (auch als "explizite Beendigungsmethoden" in "Effective Java").

(Geerbt von Object)
JniPeerMembers

CloseGuard ist ein Mechanismus zum Kennzeichnen der impliziten Endisierung von Ressourcen, die durch explizite Close-Methoden bereinigt werden sollten (auch als "explizite Beendigungsmethoden" in "Effective Java").

PeerReference

CloseGuard ist ein Mechanismus zum Kennzeichnen der impliziten Endisierung von Ressourcen, die durch explizite Close-Methoden bereinigt werden sollten (auch als "explizite Beendigungsmethoden" in "Effective Java").

(Geerbt von Object)
ThresholdClass

Diese API unterstützt die Mono für Android-Infrastruktur und ist nicht für die direkte Verwendung aus Ihrem Code vorgesehen.

(Geerbt von Object)
ThresholdType

Diese API unterstützt die Mono für Android-Infrastruktur und ist nicht für die direkte Verwendung aus Ihrem Code vorgesehen.

(Geerbt von Object)

Methoden

Name Beschreibung
Clone()

Erstellt und gibt eine Kopie dieses Objekts zurück.

(Geerbt von Object)
Close()

Markiert diese CloseGuard-Instanz als geschlossen, um Warnungen bei der Finalisierung zu vermeiden.

Dispose()

CloseGuard ist ein Mechanismus zum Kennzeichnen der impliziten Endisierung von Ressourcen, die durch explizite Close-Methoden bereinigt werden sollten (auch als "explizite Beendigungsmethoden" in "Effective Java").

(Geerbt von Object)
Dispose(Boolean)

CloseGuard ist ein Mechanismus zum Kennzeichnen der impliziten Endisierung von Ressourcen, die durch explizite Close-Methoden bereinigt werden sollten (auch als "explizite Beendigungsmethoden" in "Effective Java").

(Geerbt von Object)
Equals(Object)

Gibt an, ob ein anderes Objekt "gleich" diesem Objekt ist.

(Geerbt von Object)
GetHashCode()

Gibt einen Hashcodewert für das Objekt zurück.

(Geerbt von Object)
JavaFinalize()

Wird vom Garbage Collector für ein Objekt aufgerufen, wenn die Garbage Collection bestimmt, dass keine weiteren Verweise auf das Objekt vorhanden sind.

(Geerbt von Object)
Notify()

Aktiviert einen einzelnen Thread, der auf dem Monitor dieses Objekts wartet.

(Geerbt von Object)
NotifyAll()

Aktiviert alle Threads, die auf dem Monitor dieses Objekts warten.

(Geerbt von Object)
Open(String)

Initialisiert die Instanz mit einer Warnung, dass der Aufrufer die closeMethodName Methode explizit aufgerufen haben soll, anstatt sich auf die Finalisierung zu verlassen.

SetHandle(IntPtr, JniHandleOwnership)

Legt die Handle-Eigenschaft fest.

(Geerbt von Object)
ToArray<T>()

CloseGuard ist ein Mechanismus zum Kennzeichnen der impliziten Endisierung von Ressourcen, die durch explizite Close-Methoden bereinigt werden sollten (auch als "explizite Beendigungsmethoden" in "Effective Java").

(Geerbt von Object)
ToString()

Gibt eine Zeichenfolgendarstellung des Objekts zurück.

(Geerbt von Object)
UnregisterFromRuntime()

CloseGuard ist ein Mechanismus zum Kennzeichnen der impliziten Endisierung von Ressourcen, die durch explizite Close-Methoden bereinigt werden sollten (auch als "explizite Beendigungsmethoden" in "Effective Java").

(Geerbt von Object)
Wait()

Bewirkt, dass der aktuelle Thread wartet, bis er wach ist, in der Regel durch em benachrichtigt/em< oder >em<unterbrochen>/em<.><>

(Geerbt von Object)
Wait(Int64, Int32)

Bewirkt, dass der aktuelle Thread wartet, bis er wach ist, in der Regel durch <em>benachrichtigt</em> oder <em>unterbrochen</em> oder bis eine bestimmte Menge an Echtzeit verstrichen ist.

(Geerbt von Object)
Wait(Int64)

Bewirkt, dass der aktuelle Thread wartet, bis er wach ist, in der Regel durch <em>benachrichtigt</em> oder <em>unterbrochen</em> oder bis eine bestimmte Menge an Echtzeit verstrichen ist.

(Geerbt von Object)
WarnIfOpen()

Protokolliert eine Warnung, wenn der Aufrufer vor abschluss der Fertigstellung keine explizite Close-Methode aufgerufen hat.

Explizite Schnittstellenimplementierungen

Name Beschreibung
IJavaPeerable.Disposed()

CloseGuard ist ein Mechanismus zum Kennzeichnen der impliziten Endisierung von Ressourcen, die durch explizite Close-Methoden bereinigt werden sollten (auch als "explizite Beendigungsmethoden" in "Effective Java").

(Geerbt von Object)
IJavaPeerable.DisposeUnlessReferenced()

CloseGuard ist ein Mechanismus zum Kennzeichnen der impliziten Endisierung von Ressourcen, die durch explizite Close-Methoden bereinigt werden sollten (auch als "explizite Beendigungsmethoden" in "Effective Java").

(Geerbt von Object)
IJavaPeerable.Finalized()

CloseGuard ist ein Mechanismus zum Kennzeichnen der impliziten Endisierung von Ressourcen, die durch explizite Close-Methoden bereinigt werden sollten (auch als "explizite Beendigungsmethoden" in "Effective Java").

(Geerbt von Object)
IJavaPeerable.JniManagedPeerState

CloseGuard ist ein Mechanismus zum Kennzeichnen der impliziten Endisierung von Ressourcen, die durch explizite Close-Methoden bereinigt werden sollten (auch als "explizite Beendigungsmethoden" in "Effective Java").

(Geerbt von Object)
IJavaPeerable.SetJniIdentityHashCode(Int32)

CloseGuard ist ein Mechanismus zum Kennzeichnen der impliziten Endisierung von Ressourcen, die durch explizite Close-Methoden bereinigt werden sollten (auch als "explizite Beendigungsmethoden" in "Effective Java").

(Geerbt von Object)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

CloseGuard ist ein Mechanismus zum Kennzeichnen der impliziten Endisierung von Ressourcen, die durch explizite Close-Methoden bereinigt werden sollten (auch als "explizite Beendigungsmethoden" in "Effective Java").

(Geerbt von Object)
IJavaPeerable.SetPeerReference(JniObjectReference)

CloseGuard ist ein Mechanismus zum Kennzeichnen der impliziten Endisierung von Ressourcen, die durch explizite Close-Methoden bereinigt werden sollten (auch als "explizite Beendigungsmethoden" in "Effective Java").

(Geerbt von Object)

Erweiterungsmethoden

Name Beschreibung
GetJniTypeName(IJavaPeerable)

Ruft den JNI-Namen des Typs der Instanz selfab.

JavaAs<TResult>(IJavaPeerable)

Versuchen Sie, die Eingabe selfzu TResult erzwingen, und überprüfen Sie, ob die Koersion auf der Java Seite gültig ist.

JavaCast<TResult>(IJavaObject)

Führt eine android-laufzeitgecheckte Typkonvertierung aus.

JavaCast<TResult>(IJavaObject)

CloseGuard ist ein Mechanismus zum Kennzeichnen der impliziten Endisierung von Ressourcen, die durch explizite Close-Methoden bereinigt werden sollten (auch als "explizite Beendigungsmethoden" in "Effective Java").

TryJavaCast<TResult>(IJavaPeerable, TResult)

Versuchen Sie, die Eingabe selfzu TResult erzwingen, und überprüfen Sie, ob die Koersion auf der Java Seite gültig ist.

Gilt für: