パソコンとスマホアプリの大きな違いの一つがライフサイクル(一般にはActivityのライフサイクルと呼ばれるようだ)である。 スマホの個人用地図アプリを作成して1年4か月ほどになるが、 それほど重要なアプリではなく、また、主メモリに十分な余裕があるため、格別なトラブルは生じていない。
アプリの一生おいて、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()では、キャッシュ等全てのデータを廃棄(必要に応じて退避)すべきである。 リスナーやレシーバーも解放する。