CloseGuard Clase

Definición

CloseGuard es un mecanismo para marcar la limpieza implícita de los recursos que deben haberse limpiado mediante métodos de cierre explícitos (también conocidos como "métodos de terminación explícitos" en 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
Herencia
CloseGuard
Atributos

Comentarios

CloseGuard es un mecanismo para marcar la limpieza implícita de los recursos que deben haberse limpiado mediante métodos de cierre explícitos (también conocidos como "métodos de terminación explícitos" en Effective Java).

Un ejemplo sencillo:

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

En el uso en el que el recurso que se va a limpiar explícitamente se asigna después de la construcción del objeto, se puede aplazar la protección de CloseGuard. Por ejemplo:

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

Cuando se usa en un constructor, las llamadas a open deben producirse al final del constructor, ya que una excepción que provocaría una terminación abrupta del constructor significará que el usuario no tendrá una referencia al objeto para limpiar explícitamente. Cuando se usa en un método, la llamada a open debe producirse justo después de la adquisición de recursos.

Java documentación para android.util.CloseGuard.

Las partes de esta página son modificaciones basadas en el trabajo creado y compartido por el Android y se usan según los términos descritos en creative Creative Commons 2.5 Attribution License.

Constructores

Nombre Description
CloseGuard()

Construye una nueva instancia de CloseGuard.

Propiedades

Nombre Description
Class

Devuelve la clase en tiempo de ejecución de este Objectobjeto .

(Heredado de Object)
Handle

Identificador de la instancia de Android subyacente.

(Heredado de Object)
JniIdentityHashCode

Obtiene el código hash de identidad asignado a este Java del mismo nivel por el tiempo de ejecución de interoperabilidad.

(Heredado de Object)
JniPeerMembers

CloseGuard es un mecanismo para marcar la limpieza implícita de los recursos que deben haberse limpiado mediante métodos de cierre explícitos (también conocidos como "métodos de terminación explícitos" en Effective Java).

PeerReference

Obtiene la referencia de objeto JNI para este Java del mismo nivel.

(Heredado de Object)
ThresholdClass

Esta API admite la infraestructura mono para Android y no está pensada para usarse directamente desde el código.

(Heredado de Object)
ThresholdType

Esta API admite la infraestructura mono para Android y no está pensada para usarse directamente desde el código.

(Heredado de Object)

Métodos

Nombre Description
Clone()

Crea y devuelve una copia de este objeto.

(Heredado de Object)
Close()

Marca esta instancia de CloseGuard como cerrada para evitar advertencias sobre la finalización.

Dispose()

Libera los recursos mantenidos por este Java del mismo nivel.

(Heredado de Object)
Dispose(Boolean)

Libera los recursos mantenidos por este Java del mismo nivel.

(Heredado de Object)
Equals(Object)

Indica si algún otro objeto es "igual a" este.

(Heredado de Object)
GetHashCode()

Devuelve un valor de código hash para el objeto .

(Heredado de Object)
JavaFinalize()

Lo llama el recolector de elementos no utilizados en un objeto cuando la recolección de elementos no utilizados determina que no hay más referencias al objeto .

(Heredado de Object)
Notify()

Activa un único subproceso que está esperando en el monitor de este objeto.

(Heredado de Object)
NotifyAll()

Activa todos los subprocesos que están esperando en el monitor de este objeto.

(Heredado de Object)
Open(String)

Inicializa la instancia con una advertencia de que el autor de la llamada debe haber llamado explícitamente al closeMethodName método en lugar de confiar en la finalización.

SetHandle(IntPtr, JniHandleOwnership)

Establece la propiedad Handle.

(Heredado de Object)
ToArray<T>()

Crea una matriz administrada a partir de este contenedor de matriz Java.

(Heredado de Object)
ToString()

Devuelve una representación de cadena del objeto .

(Heredado de Object)
UnregisterFromRuntime()

Anula el registro de este Java del mismo nivel del tiempo de ejecución de interoperabilidad.

(Heredado de Object)
Wait()

Hace que el subproceso actual espere hasta que se despierte, normalmente por ser em notificado/em< o >em<interrumpido>/em<.><>

(Heredado de Object)
Wait(Int64, Int32)

Hace que el subproceso actual espere hasta que se despierte, normalmente por ser <em>notificado</em> o <em>interrumpido</em>, o hasta que haya transcurrido una cierta cantidad de tiempo real.

(Heredado de Object)
Wait(Int64)

Hace que el subproceso actual espere hasta que se despierte, normalmente por ser <em>notificado</em> o <em>interrumpido</em>, o hasta que haya transcurrido una cierta cantidad de tiempo real.

(Heredado de Object)
WarnIfOpen()

Registra una advertencia si el autor de la llamada no ha limpiado correctamente llamando a un método de cierre explícito antes de la finalización.

Implementaciones de interfaz explícitas

Nombre Description
IJavaPeerable.Disposed()

Notifica al tiempo de ejecución de interoperabilidad que se ha eliminado este mismo nivel administrado.

(Heredado de Object)
IJavaPeerable.DisposeUnlessReferenced()

Libera este Java del mismo nivel a menos que otra referencia administrada lo conserve.

(Heredado de Object)
IJavaPeerable.Finalized()

Notifica al tiempo de ejecución de interoperabilidad que se ha finalizado este mismo nivel administrado.

(Heredado de Object)
IJavaPeerable.JniManagedPeerState

Obtiene el estado que describe la relación entre este par administrado y su referencia de JNI.

(Heredado de Object)
IJavaPeerable.SetJniIdentityHashCode(Int32)

Establece el código hash de identidad de interoperabilidad para este Java del mismo nivel.

(Heredado de Object)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

Establece el estado del mismo nivel administrado y JNI para este Java del mismo nivel.

(Heredado de Object)
IJavaPeerable.SetPeerReference(JniObjectReference)

Establece la referencia de objeto JNI usada por este par administrado.

(Heredado de Object)

Métodos de extensión

Nombre Description
GetJniTypeName(IJavaPeerable)

Obtiene el nombre JNI del tipo de la instancia self.

JavaAs<TResult>(IJavaPeerable)

Intente coerción self para escribir TResult, comprobando que la coerción es válida en el lado de Java.

JavaCast<TResult>(IJavaObject)

Realiza una conversión de tipos comprobados en tiempo de ejecución de Android.

JavaCast<TResult>(IJavaObject)

CloseGuard es un mecanismo para marcar la limpieza implícita de los recursos que deben haberse limpiado mediante métodos de cierre explícitos (también conocidos como "métodos de terminación explícitos" en Effective Java).

TryJavaCast<TResult>(IJavaPeerable, TResult)

Intente coerción self para escribir TResult, comprobando que la coerción es válida en el lado de Java.

Se aplica a