FC2ブログ

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[Android] アクティビティの状態遷移の実験

Android アクティビティの状態遷移の実験

Android の Activity には、以下の7つの状態が存在し、状態の変化が起こった場合にはそれぞれ対応するメソッドが呼ばれる。

1) onCreate
2) onRestart
3) onStart
4) onResume
5) onPause
6) onStop
7) onDestroy



説明文を読んでもよくわからなかったので、以下のようなコードを書いて実験してみた。

package jp.android.Test14;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

public class ActivityStatusActivity extends Activity {

static final String TAG = "ActivityStatusActivity";
String mParam;

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

// 呼び出し元から渡されたパラメータを取り出す
Bundle extras = getIntent().getExtras();
if (extras != null) {
mParam = (String)extras.getSerializable("Param");
if (mParam != null) {
Log.d(TAG, "Param を取得できた");
} else {
Log.d(TAG, "ScheduleSetting が空だ!");
}
} else {
Log.d(TAG, "getExtras()がnullを返した!");
}
}


@Override
public void onStart() {
Log.i(TAG, "onStart");
super.onStart();
}

@Override
public void onResume() {
Log.i(TAG, "onResume");
super.onResume();
}

@Override
public void onPause() {
Log.i(TAG, "onPause");
super.onPause();
}

@Override
public void onStop() {
Log.i(TAG, "onStop");
super.onStop();
}

@Override
public void onDestroy() {
Log.i(TAG, "onDestroy");
super.onDestroy();
}

@Override
public void onRestart() {
Log.i(TAG, "onRestart");
super.onRestart();
}
}



このインテントを起動(?)する側は、以下のように、putExtra() によってパラメータ(?)を与えるようにしている。
呼び出された方のアクティビティで、そのパラメータがきちんと取得できるかどうか、という点も、実験によって明らかにしたかったのだ。

Intent intent = new Intent(getApplicationContext(), ActivityStatusActivity.class);
intent.putExtra("Param", "ほげほげ");
startActivityForResult(intent, 1);




■実験結果

実験結果は以下のとおりだった。

1) 最初にアクティビティが表示された時

INFO/ActivityStatusActivity(31156): onCreate
DEBUG/ActivityStatusActivity(31156): Param を取得できた
INFO/ActivityStatusActivity(31156): onStart
INFO/ActivityStatusActivity(31156): onResume


2) その状態で、携帯端末を90度回転させた時

INFO/ActivityStatusActivity(31156): onPause
INFO/ActivityStatusActivity(31156): onStop
INFO/ActivityStatusActivity(31156): onDestroy
INFO/ActivityStatusActivity(31156): onCreate
DEBUG/ActivityStatusActivity(31156): Param を取得できた
INFO/ActivityStatusActivity(31156): onStart
INFO/ActivityStatusActivity(31156): onResume

このように、回転させるとなんと、一旦アクティビティは Destroy されることが分かった!!
また、Destroyされているにもかかわらず、呼び出し側がセットしていたパラメータが再度取得可能な状態であった点には驚いた。


3) アクティビティ表示状態から、[戻る]ボタン(ハードウェアのボタン)を押した時

INFO/AllBackup(31156): onPause
INFO/AllBackup(31156): onStop
INFO/AllBackup(31156): onDestroy


4) アクティビティ表示状態から、[ホーム]ボタン(ハードウェアのボタン)を押した時

INFO/AllBackup(31156): onPause
INFO/AllBackup(31156): onStop


5) 上記 4) の状態から、再度アプリを起動した時

INFO/AllBackup(31156): onRestart
INFO/AllBackup(31156): onStart
INFO/AllBackup(31156): onResume

※非表示になっている最中に、他のアプリを動かしたりしてメモリ不足になったりすると、
Destroy されたりするのかもしれないが、その状態は再現できなかった。
スポンサーサイト
コメント
コメントの投稿
管理者にだけ表示を許可する

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。