June 2, 2012

アプリとActivityのライフサイクル

アプリのライフサイクルはほぼActivityのライフサイクルとなります。アプリは複数のActivityで構成されており、アプリが起動されると指定されたActivityを起動し、他のActivityに遷移をしたりを繰り返しながら動作します。

Android Developersから引用した1つのActivityのライフサイクルは以下のようになっています。


アプリを起動すると、指定されたActivityのonCreate()ではじまり、onStart()、onResume()を通して、そのActivityが実行状態に遷移します。

Activityは基本的に画面全体を占有して表示します。

Activityは同時に1つしか動作しないため、他のActivityが起動されると実行状態のActivityはonPause()で停止状態に遷移し、かわりに別のActivityがonCreate()、onStart()、onResume()を通して実行状態に遷移します。前のActivityは表示不要と判断されればこの後onStop()が呼ばれますし、存在も不要と判断されればonDestroy()まで呼ばれます。onStop()のあと停止状態にあったActivityが復帰するときはonRestart()が呼ばれたあと、onStart()が呼ばれます。

このように状態がかわると特定の関数が呼ばれる仕組みになっていて、必要なところだけOverrideして実装することで状態管理することができます。

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // User definition
    }
    @Override
    public void onStart() {
     super.onStart();
     // User definition
    }
    @Override
    public void onResume() {
     super.onResume();
     // User definition
    }
    @Override
    public void onPause() {
     super.onPause();
     // User definition
    }
    @Override
    public void onStop() {
     super.onStop();
     // User definition
    }
    @Override
    public void onDestroy() {
     super.onDestroy();
     // User definition
    }
    @Override
    public void onRestart() {
     super.onRestart();
     // User definition
    }

これらの状態遷移の使い分けですが、基本的にはメモリ(つまりリソース)が有限なため、不要になったリソースは破棄してメモリを空けるべき、というところからきています。実行されていないのに、たくさんメモリを保持しているとOSからアプリのプロセスを強制的にKILLされます。onResume()とonPause()、onStart()とonStop()、onCreate()とonDestroy()は対になっていて、Activityが実行状態でなくなるとonPause()、表示されない状態になるとonStop()、存在が不要になるとonDestroy()が呼ばれますので、その状態に応じて不要になったリソースを解放、対になったほうで再取得というふうに作るのが省メモリな良アプリとなります。

Activityをどんどん遷移していくと「Last in, First out」(最後に入れたActivityが最初に出てくる)の仕組みで前のActivityがスタックされていきます。バックキーなどで前のActivityに戻るとこの順番でActivityが復活していきます。

No comments:

Post a Comment