0

以下のコードは、匿名クラスで実装されるオブジェクトのインスタンス化です。

私がはっきりしていないのは、匿名クラスによって作成されたオブジェクトの正確な寿命です。

この線

PictureCallback jpegCallback;

PictureCallback タイプの変数を作成し、それに jpegCallback という名前を割り当てます。この変数は、MainClass クラスのメンバー変数です。

次に、PictureCallback タイプの新しいオブジェクトをインスタンス化し、それを jpegCallback 変数に格納します。

私が理解していないのは、このコードがいつ実行されるかです。PictureCallback jpegCallback 変数は MainClass のメンバーであるため、MainClass がクラス ローダーによってロードされるときに、他のメンバー変数および MainClass の静的変数と同時に作成する必要があるようです。

したがって、これが true の場合、静的内部クラスまたは静的変数と同じ方法で PictureCallback 匿名クラスを作成する必要があります。ランタイムの開始時。

ランタイムの途中で存在を停止した場合、コールバック メソッドが呼び出された場合、オブジェクトが存在しなくなるため、オーバーライドされたメソッドで定義されたアクションが発生しないため、匿名オブジェクトは静的オブジェクトのように存在する必要があります。

私の推測では、このオブジェクトは、MainClass が読み込まれると静的オブジェクトのように作成され、MainClass が破棄されるまで継続します。

この匿名クラスオブジェクトがいつ存在するのか、ガベージコレクターによって一掃されたのか、アクセスできなくなったのか、誰かが説明できますか?

 public class MainClass extends Activity {

     PictureCallback jpegCallback = new PictureCallback() {

           @Override void onPictureTaken(byte[], data, Camera camera){

              // some action performed

           }

     }

 } // end of MainClass
4

2 に答える 2