73887


初歩的な質問で申し訳ありません。  
@OnLifecycleEventについて質問があります。  
@OnLifecycleEventの働きと@から始まる関数？の総称が知りたいです。

詳細は下の通りです。

Andorid（Java）でライフサイクルについてAndroid developersで勉強していたところ、以下のコードが出てきました。

[code]

    public class CameraComponent implements LifecycleObserver {
    
        @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
        public void initializeCamera() {
            if (camera == null) {
                getCamera();
            }
        }
    
    }
    
[/code]

解説は以下のようにされていました。

> LifecycleObserver が ON_RESUME イベントを受け取るとカメラを初期化します。

質問１  
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)はif文のようなもので  
Lifecycle.Event.ON_RESUMEを受け取ると、すぐ下のinitializeCameraメソッドを実行するという理解で  
あってますか？

質問２  
このような@から始まる関数？について勉強したいのですが、なんという名前なのか教えていただけないでしょうか。


CC BY-SA 4.0
2021-02-09T08:48:31.310
73884
2021-02-09T14:10:33.060
2021-02-09T14:10:33.060
32986
43893
question
java android
@(アットマーク)から始まる関数？は何でしょうか？


説明の都合上質問を入れ替えて回答します。

## 回答2

_**@から始まる記述は「アノテーション」と呼ばれます。**_

有名なところでは以下のようなものがあります。

  * 継承元クラスのメソッドを継承先クラスで定義し直すための`@override`
  * 推奨されないメソッドやクラスを使用した場合、コンパイル時に警告として出力を出すための`@Deprecated`

プログラムの処理そのものではなく、コンパイラや実行環境に対してなにかを通知するためのものです。  
コンパイラや実行環境はこの記述を見て、必要に応じてユーザーに通知をしたり処理を変更したりします。

C言語のプリプロセッサの`#define`や`#if`と似た概念です。  
(C言語を使用したことがない場合は申し訳ありません）

## 回答1

if文のようなものとは考えないほうが良いと思います。

今回の例だと「アプリが起動して表示が行われた（or
再表示された）ときにInitializeCameraメソッドを実行してくれ」と実行環境に伝えるための記述です。  
これは「ActivityのライフサイクルメソッドのonResume内でInitiaizeCameraを実行する」という処理を記述するのと同じ様な意味になります。  
※正確には異なります。

ライフサイクルの状態変化時に実行したい処理は、開発するにつれて多くなってきます。  
それらを全てOnResumeや他のライフサイクルメソッド内に記述するのは煩雑で、他の問題も発生します。

アノテーションはメソッドと同じ場所に記述するだけで良いので、より管理しやすい様な設計になっています。


CC BY-SA 4.0
2021-02-09T10:53:28.190
73887
2021-02-09T10:53:28.190
43849
73884
answer