Linguaggio

CloseGuard Classe

Definizione

CloseGuard è un meccanismo per contrassegnare la pulizia implicita del finalizzatore implicito delle risorse che devono essere state pulite tramite metodi di chiusura espliciti (noti anche come "metodi di terminazione esplicita" 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
Ereditarietà
CloseGuard
Attributi

Commenti

CloseGuard è un meccanismo per contrassegnare la pulizia implicita del finalizzatore implicito delle risorse che devono essere state pulite tramite metodi di chiusura espliciti (noti anche come "metodi di terminazione esplicita" in Effective Java).

Un semplice esempio:

{@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();
                      }
                  }
              }
            }

Nell'utilizzo in cui la risorsa da pulire in modo esplicito viene allocata dopo la costruzione dell'oggetto, la protezione CloseGuard può essere posticipata. Per esempio:

{@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();
                      }
                  }
              }
            }

Quando viene usato in un costruttore, le chiamate a open devono verificarsi alla fine del costruttore perché un'eccezione che causerebbe una chiusura brusca del costruttore significa che l'utente non avrà un riferimento all'oggetto per la pulizia in modo esplicito. Se usato in un metodo, la chiamata a open deve essere eseguita subito dopo l'acquisizione delle risorse.

per android.util.CloseGuard.

Le parti di questa pagina sono modifiche basate sul lavoro creato e condiviso dalla e usati in base ai termini descritti in Creative License 2.5 Attribution License.

Costruttori

Nome Descrizione
CloseGuard()

Costruisce una nuova istanza di CloseGuard.

Proprietà

Nome Descrizione
Class

Restituisce la classe di runtime di questo Objectoggetto .

(Ereditato da Object)
Handle

Handle per l'istanza di Android sottostante.

(Ereditato da Object)
JniIdentityHashCode

Ottiene il codice hash di identità assegnato a questo Java peer dal runtime di interoperabilità.

(Ereditato da Object)
JniManagedPeerState

CloseGuard è un meccanismo per contrassegnare la pulizia implicita del finalizzatore implicito delle risorse che devono essere state pulite tramite metodi di chiusura espliciti (noti anche come "metodi di terminazione esplicita" in Effective Java).

(Ereditato da JavaObject)
JniPeerMembers

CloseGuard è un meccanismo per contrassegnare la pulizia implicita del finalizzatore implicito delle risorse che devono essere state pulite tramite metodi di chiusura espliciti (noti anche come "metodi di terminazione esplicita" in Effective Java).

PeerReference

Ottiene il riferimento all'oggetto JNI per questo peer Java.

(Ereditato da Object)
ThresholdClass

Questa API supporta l'infrastruttura Mono per Android e non deve essere usata direttamente dal codice.

(Ereditato da Object)
ThresholdType

Questa API supporta l'infrastruttura Mono per Android e non deve essere usata direttamente dal codice.

(Ereditato da Object)

Metodi

Nome Descrizione
Clone()

Crea e restituisce una copia di questo oggetto.

(Ereditato da Object)
Close()

Contrassegna questa istanza di CloseGuard come chiusa per evitare avvisi durante la finalizzazione.

Construct(JniObjectReference, JniObjectReferenceOptions)

CloseGuard è un meccanismo per contrassegnare la pulizia implicita del finalizzatore implicito delle risorse che devono essere state pulite tramite metodi di chiusura espliciti (noti anche come "metodi di terminazione esplicita" in Effective Java).

(Ereditato da JavaObject)
Dispose()

Rilascia le risorse contenute in questo peer Java.

(Ereditato da Object)
Dispose(Boolean)

Rilascia le risorse contenute in questo peer Java.

(Ereditato da Object)
DisposeUnlessReferenced()

CloseGuard è un meccanismo per contrassegnare la pulizia implicita del finalizzatore implicito delle risorse che devono essere state pulite tramite metodi di chiusura espliciti (noti anche come "metodi di terminazione esplicita" in Effective Java).

(Ereditato da JavaObject)
Equals(Object)

CloseGuard è un meccanismo per contrassegnare la pulizia implicita del finalizzatore implicito delle risorse che devono essere state pulite tramite metodi di chiusura espliciti (noti anche come "metodi di terminazione esplicita" in Effective Java).

(Ereditato da JavaObject)
Equals(Object)

Indica se un altro oggetto è "uguale a" questo.

(Ereditato da Object)
GetHashCode()

Restituisce un valore di codice hash per l'oggetto .

(Ereditato da Object)
JavaFinalize()

Chiamato dal Garbage Collector su un oggetto quando Garbage Collection determina che non sono presenti altri riferimenti all'oggetto .

(Ereditato da Object)
Notify()

Riattiva un singolo thread in attesa del monitor dell'oggetto.

(Ereditato da Object)
NotifyAll()

Riattiva tutti i thread in attesa del monitor dell'oggetto.

(Ereditato da Object)
Open(String)

Inizializza l'istanza con un avviso che indica che il chiamante deve chiamare in modo esplicito il closeMethodName metodo anziché basarsi sulla finalizzazione.

SetHandle(IntPtr, JniHandleOwnership)

Imposta la proprietà Handle.

(Ereditato da Object)
SetPeerReference(JniObjectReference, JniObjectReferenceOptions)

CloseGuard è un meccanismo per contrassegnare la pulizia implicita del finalizzatore implicito delle risorse che devono essere state pulite tramite metodi di chiusura espliciti (noti anche come "metodi di terminazione esplicita" in Effective Java).

(Ereditato da JavaObject)
ToArray<T>()

Crea una matrice gestita da questo wrapper di matrice Java.

(Ereditato da Object)
ToString()

Restituisce una rappresentazione di stringa dell'oggetto .

(Ereditato da Object)
UnregisterFromRuntime()

Annulla la registrazione di questo Java peer dal runtime di interoperabilità.

(Ereditato da Object)
Wait()

Fa sì che il thread corrente attenda finché non viene risvegliato, in genere ricevendo <>una notifica</em> o <em>interrotto</em>.

(Ereditato da Object)
Wait(Int64, Int32)

Fa sì che il thread corrente attenda finché non viene risvegliato, in genere ricevendo<> una notifica</em> o <em>interrotto</em> o fino a quando non è trascorsa una determinata quantità di tempo reale.

(Ereditato da Object)
Wait(Int64)

Fa sì che il thread corrente attenda finché non viene risvegliato, in genere ricevendo<> una notifica</em> o <em>interrotto</em> o fino a quando non è trascorsa una determinata quantità di tempo reale.

(Ereditato da Object)
WarnIfOpen()

Registra un avviso se il chiamante non ha eseguito correttamente la pulizia chiamando un metodo di chiusura esplicito prima della finalizzazione.

Implementazioni dell'interfaccia esplicita

Nome Descrizione
IJavaPeerable.Disposed()

CloseGuard è un meccanismo per contrassegnare la pulizia implicita del finalizzatore implicito delle risorse che devono essere state pulite tramite metodi di chiusura espliciti (noti anche come "metodi di terminazione esplicita" in Effective Java).

(Ereditato da JavaObject)
IJavaPeerable.Finalized()

CloseGuard è un meccanismo per contrassegnare la pulizia implicita del finalizzatore implicito delle risorse che devono essere state pulite tramite metodi di chiusura espliciti (noti anche come "metodi di terminazione esplicita" in Effective Java).

(Ereditato da JavaObject)
IJavaPeerable.JniObjectReferenceControlBlock

CloseGuard è un meccanismo per contrassegnare la pulizia implicita del finalizzatore implicito delle risorse che devono essere state pulite tramite metodi di chiusura espliciti (noti anche come "metodi di terminazione esplicita" in Effective Java).

(Ereditato da JavaObject)
IJavaPeerable.SetJniIdentityHashCode(Int32)

CloseGuard è un meccanismo per contrassegnare la pulizia implicita del finalizzatore implicito delle risorse che devono essere state pulite tramite metodi di chiusura espliciti (noti anche come "metodi di terminazione esplicita" in Effective Java).

(Ereditato da JavaObject)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

CloseGuard è un meccanismo per contrassegnare la pulizia implicita del finalizzatore implicito delle risorse che devono essere state pulite tramite metodi di chiusura espliciti (noti anche come "metodi di terminazione esplicita" in Effective Java).

(Ereditato da JavaObject)
IJavaPeerable.SetPeerReference(JniObjectReference)

CloseGuard è un meccanismo per contrassegnare la pulizia implicita del finalizzatore implicito delle risorse che devono essere state pulite tramite metodi di chiusura espliciti (noti anche come "metodi di terminazione esplicita" in Effective Java).

(Ereditato da JavaObject)

Metodi di estensione

Nome Descrizione
GetJniTypeName(IJavaPeerable)

Ottiene il nome JNI del tipo dell'istanza selfdi .

JavaAs<TResult>(IJavaPeerable)

Provare a digitare selfTResult, verificando che la coercizione sia valida sul lato Java.

JavaCast<TResult>(IJavaObject)

Esegue una conversione del tipo di tipo controllato dal runtime Android.

JavaCast<TResult>(IJavaObject)

CloseGuard è un meccanismo per contrassegnare la pulizia implicita del finalizzatore implicito delle risorse che devono essere state pulite tramite metodi di chiusura espliciti (noti anche come "metodi di terminazione esplicita" in Effective Java).

TryJavaCast<TResult>(IJavaPeerable, TResult)

Provare a digitare selfTResult, verificando che la coercizione sia valida sul lato Java.

Si applica a