アプリケーションの初期化方法
認証やデータの取得等、アプリケーション起動時に必ず実行したい初期化をどこに入れるのが良いのか調査した。
見つかったパターンは以下の通り。
それぞれ利点・欠点があるのでどれが良いとは一概には言えない。
- ApplicationManifest.xml で Main Activity として指定する Activity で初期化
- Application#onCreate() で初期化
- Application#onCreate() で非同期初期化を開始、その初期化結果が必要な箇所では初期化が終わるまで待機
- 全Activity の開始時に初期化されているか否かをチェックするメソッドを用意しておき、そのメソッドが false を返した場合、初期化用 Activity を開始
ApplicationManifest.xml で Main Activity として指定する Activity で初期化
- 利点
- 初期化している間、スプラッシュスクリーンを出すなどUIを表示することができる
- 実装に必要なコードが少ない。
- 欠点
- 思いの外、実行されないケースが多い。
実行されないケースとしては以下のケースがある。- 他のアプリケーションから初期化用Activityを通さない形で他のActivityが呼び出されるケース。
- 他のアプリケーションを実行している間に本アプリケーションのプロセスがリソース削減のために落とされる。
そしてその後、本アプリケーションに戻ってくるケース。 - ランチャーから起動した際、Activity Stackが復元され、初期化用Activityを通さず他のActivityから開始されるケース。
- 思いの外、実行されないケースが多い。
Application#onCreate() で初期化
- 利点
- プロセス開始時に必ず実行される。
- 実装に必要なコードが少ない。
- 欠点
- スプラッシュスクリーンを含めUIが表示されず、ブラックスクリーンのままになってしまう。
Application#onCreate() で非同期初期化を開始し、その初期化結果が必要な箇所では初期化が終わるまで待機
- 利点
- Application実行時に必ず実行される
- 欠点
- 初期化結果が必要な箇所すべてに初期化判定コードと初期化が終わるまで待機するコードを入れる必要がある
全Activity の開始時に初期化されているか否かをチェックするメソッドを用意しておき、そのメソッドが false を返した場合、初期化用 Activity を開始
- 利点
- Activityが表示される際、必ず初期化済みであることが保証される。
- 初期化中UIを表示することができる。
- 欠点
- 全Activityにコードを入れる必要がある。