質問: null) { getCamera(); } } } ``` 解説は以下のようにされていました。 > > LifecycleObserver が ON_RESUME イベントを受け取るとカメラを初期化します。 > > > 質問1 @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)はif文のようなもので Lifecycle.Event.ON_RESUMEを受け取ると、すぐ下のinitializeCameraメソッドを実行するという理解で あってますか? 質問2 このような@から始まる関数?について勉強したいのですが、なんという名前なのか教えていただけないでしょうか。
回答: 説明の都合上質問を入れ替えて回答します。 回答2 ***@から始まる記述は「アノテーション」と呼ばれます。*** 有名なところでは以下のようなものがあります。 * 継承元クラスのメソッドを継承先クラスで定義し直すための`@override` * 推奨されないメソッドやクラスを使用した場合、コンパイル時に警告として出力を出すための`@Deprecated` プログラムの処理そのものではなく、コンパイラや実行環境に対してなにかを通知するためのものです。 コンパイラや実行環境はこの記述を見て、必要に応じてユーザーに通知をしたり処理を変更したりします。 C言語のプリプロセッサの`#define`や`#if`と似た概念です。 (C言語を使用したことがない場合は申し訳ありません) 回答1 if文のようなものとは考えないほうが良いと思います。 今回の例だと「アプリが起動して表示が行われた(or 再表示された)ときにInitializeCameraメソッドを実行してくれ」と実行環境に伝えるための記述です。 これは「ActivityのライフサイクルメソッドのonResume内でInitiaizeCameraを実行する」という処理を記述するのと同じ様な意味になります。 ※正確には異なります。 ライフサイクルの状態変化時に実行したい処理は、開発するにつれて多くなってきます。 それらを全てOnResumeや他のライフサイクルメソッド内に記述するのは煩雑で、他の問題も発生します。 アノテーションはメソッドと同じ場所に記述するだけで良いので、より管理しやすい様な設計になっています。