Activityのライフサイクルについて考えたいと思います。
アンドロイドアプリはextends Activityという文言をclassに付加をさせる事がデフォルトとなっていますが、基本的には全てのアンドロイドアプリは、Activityクラスを継承してライフサイクルを行います。
public class Activity extends ApplicationContext { protected void onCreate(Bundle savedInstanceState); protected void onStart(); protected void onRestart(); protected void onResume(); protected void onPause(); protected void onStop(); protected void onDestroy(); }
通常の動作ではまず、onCreateを実行していました。
その他のイベントの実行のタイミングを考えていきたいと思います。
onStart
1、onCreateの後に実行がされます。
2、onStopの後にonRestartを経て、前面に表示された場合。
となります。2に関しては、onStopの実行される理由を考える必要があります。
onStop
1、onPauseの後にそのアプリが見えなくなった場合。
ホーム画面に戻ったり、他のアプリ(全画面を使用)のアプリを立ち上げた時に実行がされます。
onPause
1、onResumeの後にそのアプリが他のアプリが立ち上がってしまった場合
ふきだしでアラームが出現するなどの場合に実行されるようです。また、onStopが実行される場合にも一度、onPauseで実行がされるようです。
onResume
1、onStartの後に実行がされます。
2、onPauseの後になんの問題もなく、アプリに戻った時に実行
※メモリが他のアプリで大量に使われた場合などはすべてがonCreateから実行されます。。
onRestart
1、onStopの後にアプリを再度立ちあげた時に実行。
※メモリが他のアプリで大量に使われた場合などは、onCreateから実行。
onCreate
1、最初に実行
2、動作が一時中断されて、他のアプリの使用にメモリが使われてしまった後に再度起動した時
onDestroy
1、終了ボタンが押された場合に呼び出されます。
と、実際に、とても分かりにくいシステムになっていますが、下記に簡単な例を示します。
■起動
[onCreate] -> [onStart] -> [onResume]
■起動中に時計のアラーム(ふきだしとか)がなった。アラームをけしてアプリに戻った。
->[onPause] -> アラーム -> [onResume]
■起動中に時計のアラーム(ふきだしとか)がなった。結構メモリを食うアプリのアラームだ。アラームをけしてアプリに戻った。
->[onPause] -> アラーム ->[onCreate] -> [onStart] -> [onResume]
■起動中に電話(電話にアプリの全画面が奪われている)がなった。電話の後にアプリに戻った。
->[onPause] ->[onStop] -> 電話 -> [onRestart] -> [onStart] -> [onResume]
■起動中に、自動で他のアプリが立ち上がった。結構なメモリを食うアプリで、しばらくしてアプリに戻った。
->[onPause] ->[onStop] ->アプリ -> [onCreate] -> [onStart] -> [onResume]
■起動中に戻るボタンでホームに戻って再度はじめた。
->[onPause] ->[onStop] ->[onDestroy] -> ホーム -> [onCreate] -> [onStart] -> [onResume]
一度動作の仕方を確認するとライフサイクルの図がとてもわかりやすく書かれているんだとわかりました。
下記サイトを参考にさせていただきました。