コンピュータクワガタ

かっぱのかっぱによるコンピュータ関連のサイトです

Androidアプリ入門 No.59 ライフサイクル Activityを呼び出した際のライフサイクル

Activityを呼び出した際のライフサイクル

次にIntentTest2プロジェクトのMainActivity.javaを以下のように変更する。ログ出力を追加しただけとなる。

package sample.it2;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends Activity {
    private EditText urlEditText;
    private Button browserButton;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.i("IntentTest2", "onCreate");
        setContentView(R.layout.main);

        urlEditText = (EditText) findViewById(R.id.urlEditText);
        browserButton = (Button) findViewById(R.id.browserButton);

        browserButton.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent("net.kuwalab.web", Uri.parse(urlEditText.getText()
                        .toString()));
                startActivity(intent);
            }
        });
    }

    @Override
    protected void onStart() {
        super.onStart();
        Log.i("IntentTest2", "onStart");
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.i("IntentTest2", "onResume");
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        Log.i("IntentTest2", "onRestart");
    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.i("IntentTest2", "onPause");
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.i("IntentTest2", "onStop");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.i("IntentTest2", "onDestroy");
    }
}

IntentTest2を実行するとログは以下の状態となる。この状態はIntentTestを実行したときと同様に、onCreate、onStart、onResumeの順で呼び出される。

この状態で「ブラウザを表示」ボタンを押す。

そうすると、IntentTest2のonPauseが呼ばれてからIntentTestのonCreate、onStart、onResumeが呼び出される。また、途中にIntentTest2のonStopが呼び出されているのもわかる。
その後、「戻る」ボタンでIntentTestを終了してIntentTest2に戻る。

そうすると、IntentTestのonPauseが呼び出された後に、IntentTest2のonRestart、onStart、onResumeが呼び出される。その後、IntentTestのonStop、onDestroyが呼び出されている。
詳細は後述するが、基本的にActivityが呼び出された場合には元のActivityのonPauseが呼び出される。そして復帰する際にはonResumeから呼び出される。今回の例は呼び出し元のonStopが呼び出されているが、なぜそうなるのかも含めてこの後で解説する。