初心者がAndroid開発をはじめました


記事の内容

前へ | 次へ

ライフサイクルの動作を確認
2010/08/29 18:49

今更ながらライフサイクル(onCreate()→onStart()→onResume())の理解を
曖昧なまま開発を進めてしまっていたため、流れを確認するために
サンプルソースを作ってみた。

説明
 よく参考書なので目にするこのライフサイクルを動かして確かめる。
 cycletest.java(メインアクティビティ)
 main.xml(メインのレイアウト)

lifecycle
画像




cycletest.java


public class cycletest extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Toast.makeText(this, "onCreate", Toast.LENGTH_SHORT).show();
}

@Override
protected void onDestroy() {
super.onDestroy();
Toast.makeText(this, "onDestory", Toast.LENGTH_SHORT).show();
}

@Override
protected void onPause() {
super.onPause();
Toast.makeText(this, "onPause", Toast.LENGTH_SHORT).show();
}

@Override
protected void onRestart() {
super.onRestart();
Toast.makeText(this, "onRestart", Toast.LENGTH_SHORT).show();
}

@Override
protected void onResume() {
super.onResume();
setContentView(R.layout.main);
Toast.makeText(this, "onResume", Toast.LENGTH_SHORT).show();
}

@Override
protected void onStart() {
super.onStart();
Toast.makeText(this, "onStart", Toast.LENGTH_SHORT).show();
}

@Override
protected void onStop() {
super.onStop();
Toast.makeText(this, "onStop", Toast.LENGTH_SHORT).show();
}
}



main.xml


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"

<TextView
android:text="@string/hello"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>
</LinearLayout>




これを実行することで画面下にポップアップで状態の変化を表示してくれる。
そこでいくつか動作を確認してみた。


●アプリ起動→着信→アプリ起動

 onCreate()→onStart()→onResume()→着信→onPause()→onStop()
 →アプリ起動→onRestart()→onStart()→onResume()


●アプリ起動→アラートが鳴る(ポップアップ)→アプリ起動

 onCreate()→onStart()→onResume()→アラート→onPause()
 →アプリ起動→onResume()


●アプリ起動→ホームボタン(ホーム画面表示)→アプリ起動

 onCreate()→onStart()→onResume()→ホーム画面表示→onPause()→onStop()
 →アプリ起動→onRestart()→onStart()→onResume()


●アプリ起動→戻るボタン(ホーム画面表示)→アプリ起動

 onCreate()→onStart()→onResume()→戻るボタン→onPause()→onStop()→onDestroy()
 →アプリ起動→onCreate()→onStart()→onResume()



戻るボタンを押した場合は、起動アクティビティが1画面しかないため、ホーム画面に戻ることとなる。
その際、アプリ側ではonStop()で止まらず、onDestroy()まで処理しているようだ。
と言う事で、アプリを再び起動した際は、onCreate()の処理が再び流れる。
しかし、finish()で終了はさせていないため、onDestroy()までライフサイクルでは処理しているが
裏では動き続けている。 ちょっと理解が難しい…ならばonStop()で止めておいてもらいたい。


また、画面を縦表示から横表示に切り替える際も不思議なサイクルとなる。


●アプリ起動→画面を傾け縦表示から横表示に切り替える

 onCreate()→onStart()→onResume()→縦横切り替え→onPause()→onStop()→onDestroy()
 →onCreate()→onStart()→onResume()/strong>



なぜか縦横表示も先ほどと同じライフサイクル。
onDestroy()→onCreate()…


つまりonCreate()内にfinish()を記述してアプリを終了させようとしている方は、やめた方がいい?
メニューボタンに終了を作成してそこでfinish()を実行するのがいいのかなと。




カテゴリ:基礎知識

前へ | 次へ

コメントを見る(2)
コメントを書く
トラックバック(0)
BlogTOP
このユーザーのホーム

ログイン



Powered By FC2ブログ