爬虫類嫌いのPython日記

爬虫類が大の苦手の筆者が、Pythonに挑戦。他にも、RubyやObjective-C、Google Appengine、Herokuなど色々とチャレンジしています。

Androidアクティビティのライフサイクル

Androidのアクティビティは、基本的に以下の3種類の状態を取ります。

  • 状態がアクティブまたは実行中のアクティビティは、画面のフォアグラウンドに表示されているアクティビティです。これが、ユーザーのアクションのフォーカスとなっているアクティビティです。
  • 状態が一時停止のアクティビティは、ユーザーのアクションのフォーカスから外れていますが、まだユーザーから見ることのできるアクティビティです。つまり、それよりも前面に他のアクティビティが表示されていますが、そのアクティビティが透明か全画面表示でないかのどちらかで、一時停止しているアクティビティの一部が見えている状態です。一時停止しているアクティビティは、完全に動作しています(すべての状態やメンバー情報は保持されており、ウィンドウ マネージャにアタッチされたままになっています)。ただし、メモリが極端に不足した場合は、システムによって強制終了させられる可能性があります。
  • 状態が停止のアクティビティは、別のアクティビティに隠されて完全に見えなくなったアクティビティです。すべての状態とメンバー情報はまだ保持しています。しかし、もうユーザーに対して表示されていないため、他でメモリが必要な場合は強制終了させられる可能性が高いアクティビティです。

実装においては、以下のメソッドをオーバーライドする事で、ライフサイクルの管理をします。

void onCreate(Bundle savedInstanceState) 
void onStart() 
void onRestart() 
void onResume() 
void onPause() 
void onStop() 
void onDestroy()


アクティビティのライフサイクル全体では、onCreate()が初めて呼び出されたときに始まり、最後にonDestroy()が呼び出されたときに終了します。アクティビティは、onCreate() で「全体的」な状態のすべての初期設定を行い、onDestroy() 残っていたリソースをすべて解放します。

アクティビティの可視ライフタイムは、onStart()の呼び出しで始まり、対応する onStop()の呼び出しで終了します。このライフタイムの間は、ユーザーが画面上でそのアクティビティを見ることができます。ただし、アクティビティがフォアグラウンドにない場合や、ユーザーと対話していない場合もあります。これらの 2 つのメソッドの間は、ユーザーに対してアクティビティを表示するために必要なリソースを確保できます。

アクティビティのフォアグラウンドライフタイムは、 onResume()の呼び出しで始まり、対応する onPause() の呼び出しで終了します。フォアグラウンド ランタイムの間は、このアクティビティが他のどのアクティビティよりも前面に表示され、ユーザーと対話しています。アクティビティは、一時停止状態と再開状態の間を頻繁に遷移します。



アプリケーションの初期設定は、onCreate()で行います。
状態データの永続化のタイミングとしては、onPause()が最後のタイミングとなります。onPause()の状態になると、いつプロセスが強制終了されるかわかりませんから、要注意です。