最近、Flutterを開発しているときにライフサイクルを確認するタイミングが結構あり、iOSの場合はどうか?など気になったのでAndroid、iOS、Fliutterのライフサイクルの比較表を作成しました。
目次 非表示
ライフサイクルの比較表
ライフサイクル | Android | iOS | Flutter |
---|---|---|---|
アプリ起動時 | onCreate() | application(_:didFinishLaunchingWithOptions:) | main() |
アクティビティ/ ビューコントローラ作成 | setContentView() | loadView() | build() |
ビューの作成 | onCreateView() | viewDidLoad() | initState() |
レイアウトの適用 | onStart() | viewWillAppear() | didChangeDependencies() |
ユーザーインタラクション準備 | onResume() | viewDidAppear() | didChangeAppLifecycleState() |
フォアグラウンドでの表示 | – | applicationWillEnterForeground() | didChangeAppLifecycleState() (resumed) |
バックグラウンドに移行 | onPause() | applicationDidEnterBackground() | didChangeAppLifecycleState() (inactive) |
アクティビティ/ ビューコントローラ破棄 | onStop() | viewWillDisappear() | dispose() |
ビューの破棄 | onDestroyView() | viewDidDisappear() | – |
アプリ終了時 | onDestroy() | applicationWillTerminate() | – |
Flutterでは、AndroidとiOSのライフサイクルに比べて独自のライフサイクルメソッドが使用されます。
Flutterのbuild()
メソッドはウィジェットツリーを構築し、initState()
はウィジェットの状態の初期化を行います。
また、didChangeDependencies()
メソッドはウィジェットが依存関係の変更を検知した際に呼び出されます。
さらに、didChangeAppLifecycleState()
メソッドはアプリのライフサイクル状態の変化を処理するために使用されます。
Flutterの場合、AndroidやiOSのネイティブプラットフォームとは異なるアプローチを取るため、それぞれのプラットフォームの特定のメソッドやイベントとは対応していません。
Flutterの開発者は、Flutterのライフサイクルメソッドを使用してアプリの状態の管理やイベントの処理を行う必要があります。
Android
アクティビティの作成時に呼び出されるメソッドであり、一度だけ実行されます。通常、アクティビティの初期設定やレイアウトの準備など、初期化処理を行います。
アクティビティがユーザーに表示される直前に呼び出されるメソッドです。アクティビティがフォアグラウンドに表示される直前の準備処理や、リソースの割り当てなどを行います。
アクティビティがフォアグラウンドに表示され、ユーザーの操作を受け付ける状態になったときに呼び出されるメソッドです。通常、アクティビティの更新や、ユーザーインタラクションの監視などを行います。
アクティビティが一時停止され、バックグラウンドに移行する直前に呼び出されるメソッドです。通常、データの保存やリソースの解放など、一時停止に伴う処理を行います。
アクティビティがバックグラウンドに移行し、ユーザーに表示されなくなったときに呼び出されるメソッドです。通常、リソースの解放やバックグラウンドでの処理の停止などを行います。
アクティビティが破棄される直前に呼び出されるメソッドです。通常、リソースの解放やクリーンアップなど、最終的な処理を行います。
iOS
アプリが起動し、準備が完了した直後に呼び出されるメソッドです。通常、アプリの初期設定やリソースの読み込みなどを行います。
アプリがバックグラウンドからフォアグラウンドに移行する直前に呼び出されるメソッドです。通常、復元処理やUIの更新などを行います。
アプリがバックグラウンドに移行した直後に呼び出されるメソッドです。通常、データの保存やリソースの解放など、バックグラウンドでの処理の準備を行います。。
ビューコントローラがビューの階層をロードした直後に呼び出されるメソッドです。通常、ビューの初期設定やデータの読み込みなどを行います。
ビューコントローラのビューが画面に表示される直前に呼び出されるメソッドです。通常、ビューの更新やアニメーションの開始などを行います。
ビューコントローラのビューが画面に表示され、ユーザーの操作を受け付ける状態になったときに呼び出されるメソッドです。通常、ユーザーインタラクションの監視や外部リソースの読み込みなどを行います。
ビューコントローラのビューが画面から非表示になる直前に呼び出されるメソッドです。通常、ビューの保存やアニメーションの停止などを行います。
ビューコントローラのビューが画面から非表示になり、ユーザーから見えなくなったときに呼び出されるメソッドです。通常、リソースの解放やクリーンアップなどを行います。
Flutter
Flutterアプリのエントリーポイントとなる関数であり、アプリの実行を開始します。
ウィジェットのビルドを行うメソッドであり、ウィジェットツリーを構築します。このメソッドは再ビルドされる可能性があり、ウィジェットが変更されたときに呼び出されます。
ウィジェットの状態の初期化を行うメソッドです。一度だけ呼び出され、ウィジェットが最初に作成されたときに実行されます。
ウィジェットが依存関係の変更を検知した際に呼び出されるメソッドです。通常、ウィジェットが依存するデータやリソースの変更を処理します。
アプリのライフサイクル状態の変化を処理するメソッドです。アプリがフォアグラウンドやバックグラウンドに移行したときなど、特定のイベントが発生すると呼び出されます。
ウィジェットが破棄される際に呼び出されるメソッドです。通常、リソースの解放やクリーンアップなど、最終的な処理を行います。
おわりに
最後までご覧いただきありがとうございます。
それぞれのプラットフォームで
微妙にライフサイクルが違うため、開発時は気をつける必要があります。
Androidの場合、fragmentとActivityで違ったりしますがこの表では、表現してません。
また何かありましたら共有させていただきます。