4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Ateam Finergy Inc. × Ateam Wellness Inc. Advent Calendar 2023

Day 18

ActivityとFragmentのライフサイクル簡易まとめ

Last updated at Posted at 2023-12-17

この記事はAteam Finergy Inc. × Ateam Wellness Inc. Advent Calendar 2023の18日目の記事です。

はじめに

Androidアプリの開発で切り離せないライフサイクル。
onCreateonCreateViewなど似たような名前も多くそれっぽい所に書いて終わりになりがちです。
今回改めてライフサイクルのコールバックについて種別、実行タイミング、主な用途を整理してそれっぽくを脱しようと思います。

ライフサイクル

以下、ActivityとFragmentでそれぞれ記載します。
記載の順序は基本実行される順番となります。

Activity

公式のドキュメントは下記となります。
https://developer.android.com/guide/components/activities/activity-lifecycle

activity_lifecycle.png

onCreate

  • タイミング
    • Activityが生成された時に1回
  • 用途
    • Activityのライフサイクルの全期間で1回のみ実行する必要があるものを行う
      • XMLレイアウトファイルの取得など

onStart

  • タイミング
    • Activityが開始状態になった時
    • Activityがユーザーに見えるようになる直前
  • 用途
    • UIの初期化

onResume

  • タイミング
    • Activityが再開状態になった時
    • Activityがフォアグラウンドになる時
  • 用途
    • DBの接続
    • データの取得

onPause

  • タイミング
    • Activityがフォアグラウンドでなくなる時
  • 用途
    • 続行しない処理の停止
    • バックグラウンドで続行する処理の準備、移行
  • 補足
    • 表示されていない時、ではない
      • マルチウィンドウモードではフォーカスされていない時に表示されつつonPauseになる
    • onPauseの実行時間は短いため以下のような処理は行ってはいけない
      • DBへの保存
      • 高負荷のシャットダウン

onStop

  • タイミング
    • Activityが完全にバックグラウンドに移動し停止した時
  • 用途
    • DBへのデータの保存
    • 高負荷のシャットダウン

onRestart

  • タイミング
    • onStoponStartの間
  • 用途
    • 停止した処理を再開させる

onDestroy

  • タイミング
    • Activityが破棄される直前
      • Activityが終了する時
      • デバイスの向き変更等で一時的にActivityが破棄される時
  • 用途
    • 未開放のリソースが開放される

Fragment

公式のドキュメントは下記となります。
https://developer.android.com/guide/components/fragments

fragment_lifecycle.png

onAttach

  • タイミング
    • FragmentがActivityに関連付けられた時
  • 用途
    • FragmentがActivityに管理されるようになった時に行う処理の定義
      • ActivityのListenerを取得など

onCreate

  • タイミング
    • Fragmentが生成される時
  • 用途
    • Fragmentを破棄するまで保持し続ける必須コンポーネントの初期化
  • 補足
    • Fragmentが関連付けられたActivityの生成途中で呼び出される
      • ActivityのViewに干渉することはできない

onCreateView

  • タイミング
    • FragmentのUIを描画する時
  • 用途
    • 描画するViewのセットアップ

onViewCreated

  • タイミング
    • onCreateViewonActivityCreatedの間
  • 用途
    • FragmentのViewに関する初期化

onActivityCreated(deprecated)

  • タイミング
    • 以下の2点が満たされた時
      • ActivityのonCreateが完了
      • FragmentのonCreateViewが完了
  • 用途
    • 最終的な初期化
      • UIの修正など
    • Activityが絡むViewの変更など
  • 補足
    • このメソッドはdeprecatedです
      • 推奨されている対処は以下となります
        • FragmentのViewに対する処理はonViewCreated
        • その他の初期化はFragmentのonCreate
        • ActivityのonCreateが完了した時に処理を行いたい場合は下記の手順で行う
          1. FragmentのonAttachでLifecycleObserverを登録
          2. @OnLifecycleEvent(Lifecycle.Event.ON_CREATE)のAnnotationを実行したい関数に付ける

onStart

  • タイミング
    • Fragmentが開始状態になった時
    • Fragmentがユーザーに見えるようになる直前
  • 用途
    • Fragmentがユーザーに表示される前の準備

onResume

  • タイミング
    • Fragmentが再開状態になった時
    • Fragmentがフォアグラウンドになる時
  • 用途
    • DBの接続
    • データの取得

onPause

  • タイミング
    • Fragmentがフォアグラウンドでなくなる時
  • 用途
    • 続行しない処理の停止
    • バックグラウンドで続行する処理の準備、移行

onStop

  • タイミング
    • Fragmentが完全にバックグラウンドに移動し停止した時
  • 用途
    • DBへのデータの保存
    • 高負荷のシャットダウン

onDestroyView

  • タイミング
    • Fragmentに関連付けられたViewが破棄される時
  • 用途
    • Viewが破棄される時の後始末

onDestroy

  • タイミング
    • Fragmentが破棄される時
  • 用途
    • リソースの開放

onDetach

  • タイミング
    • FragmentとActivityの関連付けが解除される時
  • 用途
    • Activityとの関連付けを解除する時の後始末

まとめ

概ね認識通りでしたが、FragmentのonCreateViewonViewCreatedonActivityCreated辺りは書いていて混乱することがあったのでそこの整理がつきました。
また、昔は恐らく記述されていなかったLifecycleObserverの活用事例を知ることができました。
既に知っていることに関しても定期的に公式ドキュメントは見直すのが良さそうです。

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?