トップAndroid Java > Androidのライフサイクル

Androidのライフサイクル

はじめに

パソコンとスマホアプリの大きな違いの一つがライフサイクル(一般にはActivityのライフサイクルと呼ばれるようだ)である。 スマホの個人用地図アプリを作成して1年4か月ほどになるが、 それほど重要なアプリではなく、また、主メモリに十分な余裕があるため、格別なトラブルは生じていない。

Activityのコールバック

アプリの一生おいて、Activityでは以下のコールバックが発生する[1]。
コールバック事象
onCreate()Activityが生成された最初の1回だけ呼び出される
onStart()Activityが画面に表示されるときに呼び出される
onRestart()ActivityがonStop()の後、復活するときに呼び出される。 このあと、onStart()が呼び出される。
onResume()Activityが前面になる時に呼び出される。
onPause()Activityがバックグラウンドに移動するときに呼び出される。
onStop()Activityが画面から見えなくなる時に呼び出される。
onDestroy()Activityが終わる時に呼び出される。

アプリが フォアグラウンドにあるのは onResume()からonPause()の間である。 切替は頻繁に起きるため、重い処理をしてはならない。

バックグラウンドに移ると、killされるかも知れないので、 必要なデータは onPause() でファイルに退避して、onResume()で回復すべきである。

自作地図アプリではハイパフォーマンスを実現するために、大量のデータをメモリに常駐させている。 GPSログは定期的にファイルに書き込んでいる。 このため、onPause()/onResume() での退避/回復は一切行っていない。


ディープスリープ状態では、OSが地図アプリのMainActivityを停止することがある。 onDestroy()では、キャッシュ等全てのデータを廃棄(必要に応じて退避)すべきである。 リスナーやレシーバーも解放する。

リファレンス

[1] Activityのライフサイクルについて
[2] Activityのライフサイクルに関する間違い
[3] アクティビティのライフサイクル 〜Android アプリ開発の基礎【図解付き】〜