CloseGuard クラス

定義

CloseGuard は、明示的な close メソッド (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
継承
CloseGuard
属性

注釈

CloseGuard は、明示的な close メソッド (Effective Java の "明示的な終了メソッド" とも呼ばれる) によってクリーンアップする必要があるリソースの暗黙的なファイナライザー クリーンアップにフラグを設定するためのメカニズムです。

簡単な例:

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

明示的にクリーンアップするリソースがオブジェクトの構築後に割り当てられる使用では、CloseGuard 保護を遅延させることができます。 例えば次が挙げられます。

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

コンストラクターで使用する場合、コンストラクターの突然の終了を引き起こす例外は、ユーザーが明示的にクリーンアップするオブジェクトへの参照を持たないことを意味するため、 open の呼び出しはコンストラクターの末尾で発生する必要があります。 メソッドで使用する場合、 open の呼び出しは、リソースの取得直後に行われる必要があります。

Javaドキュメント。

このページの一部は、によって作成および共有され、に記載されている条件に従って使用される作業に基づく変更です。

コンストラクター

名前 説明
CloseGuard()

新しい CloseGuard インスタンスを構築します。

プロパティ

名前 説明
Class

この Objectのランタイム クラスを返します。

(継承元 Object)
Handle

基になる Android インスタンスへのハンドル。

(継承元 Object)
JniIdentityHashCode

相互運用ランタイムによってこのJava ピアに割り当てられた ID ハッシュ コードを取得します。

(継承元 Object)
JniPeerMembers

CloseGuard は、明示的な close メソッド (Effective Java の "明示的な終了メソッド" とも呼ばれる) によってクリーンアップする必要があるリソースの暗黙的なファイナライザー クリーンアップにフラグを設定するためのメカニズムです。

PeerReference

このJava ピアの JNI オブジェクト参照を取得します。

(継承元 Object)
ThresholdClass

この API は Android 用 Mono インフラストラクチャをサポートしており、コードから直接使用するためのものではありません。

(継承元 Object)
ThresholdType

この API は Android 用 Mono インフラストラクチャをサポートしており、コードから直接使用するためのものではありません。

(継承元 Object)

メソッド

名前 説明
Clone()

このオブジェクトのコピーを作成して返します。

(継承元 Object)
Close()

終了時の警告を回避するために、この CloseGuard インスタンスをクローズとしてマークします。

Dispose()

このJava ピアによって保持されているリソースを解放します。

(継承元 Object)
Dispose(Boolean)

このJava ピアによって保持されているリソースを解放します。

(継承元 Object)
Equals(Object)

他のオブジェクトがこのオブジェクトと "等しい" かどうかを示します。

(継承元 Object)
GetHashCode()

オブジェクトのハッシュ コード値を返します。

(継承元 Object)
JavaFinalize()

オブジェクトへの参照がなくなったとガベージ コレクションによって判断されたときに、オブジェクトのガベージ コレクターによって呼び出されます。

(継承元 Object)
Notify()

このオブジェクトのモニターで待機している 1 つのスレッドを起動します。

(継承元 Object)
NotifyAll()

このオブジェクトのモニターで待機しているすべてのスレッドを起動します。

(継承元 Object)
Open(String)

呼び出し元が最終処理に依存するのではなく、 closeMethodName メソッドを明示的に呼び出す必要があることを警告してインスタンスを初期化します。

SetHandle(IntPtr, JniHandleOwnership)

Handle プロパティを設定します。

(継承元 Object)
ToArray<T>()

このJava配列ラッパーからマネージド配列を作成します。

(継承元 Object)
ToString()

オブジェクトの文字列形式を返します。

(継承元 Object)
UnregisterFromRuntime()

相互運用ランタイムからこのJava ピアの登録を解除します。

(継承元 Object)
Wait()

現在のスレッドが起動するまで待機します。通常は、 <em>notified</em> または <em>interrupted</em>。

(継承元 Object)
Wait(Int64, Int32)

現在のスレッドは、通常、 <em>notified</em> または <em>interrupted</em>、または一定のリアルタイムが経過するまで、起動されるまで待機します。

(継承元 Object)
Wait(Int64)

現在のスレッドは、通常、 <em>notified</em> または <em>interrupted</em>、または一定のリアルタイムが経過するまで、起動されるまで待機します。

(継承元 Object)
WarnIfOpen()

終了前に明示的な close メソッドを呼び出して、呼び出し元が適切にクリーンアップしなかった場合に警告をログに記録します。

明示的なインターフェイスの実装

名前 説明
IJavaPeerable.Disposed()

このマネージド ピアが破棄されたことを相互運用ランタイムに通知します。

(継承元 Object)
IJavaPeerable.DisposeUnlessReferenced()

別のマネージド参照によって保持されない限り、このJavaピアを解放します。

(継承元 Object)
IJavaPeerable.Finalized()

このマネージド ピアが終了したことを相互運用ランタイムに通知します。

(継承元 Object)
IJavaPeerable.JniManagedPeerState

このマネージド ピアとその JNI 参照の間の関係を記述する状態を取得します。

(継承元 Object)
IJavaPeerable.SetJniIdentityHashCode(Int32)

このJava ピアの相互運用 ID ハッシュ コードを設定します。

(継承元 Object)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

このJava ピアのマネージド ピアと JNI ピアの状態を設定します。

(継承元 Object)
IJavaPeerable.SetPeerReference(JniObjectReference)

このマネージド ピアで使用される JNI オブジェクト参照を設定します。

(継承元 Object)

拡張メソッド

名前 説明
GetJniTypeName(IJavaPeerable)

インスタンス selfの型の JNI 名を取得します。

JavaAs<TResult>(IJavaPeerable)

selfを強制的にTResult入力し、強制型がJava側で有効であることを確認します。

JavaCast<TResult>(IJavaObject)

Android ランタイムチェック型変換を実行します。

JavaCast<TResult>(IJavaObject)

CloseGuard は、明示的な close メソッド (Effective Java の "明示的な終了メソッド" とも呼ばれる) によってクリーンアップする必要があるリソースの暗黙的なファイナライザー クリーンアップにフラグを設定するためのメカニズムです。

TryJavaCast<TResult>(IJavaPeerable, TResult)

selfを強制的にTResult入力し、強制型がJava側で有効であることを確認します。

適用対象