星期五, 11月 04, 2011

實作並觀察Activity生命週期

Android應用程式學習筆記

實作說明: 試著觀察生命週期。我們運行兩個activity,並複寫所有生命週期中的回調方法,通過activity A啟動activity B和activity B啟動activity A觀察兩個activity的生命週期變化。

Activity A(HelloActivityActivity):


  1. package test.activity;

  2. import android.app.Activity;
  3. import android.content.Intent;
  4. import android.os.Bundle;
  5. import android.view.View;
  6. import android.widget.Button;

  7. public class HelloActivityActivity extends Activity {
  8.     /** Called when the activity is first created. */
  9. private Button mBtn;
  10.     @Override
  11.     public void onCreate(Bundle savedInstanceState) {
  12.      //初始化所有成員變數
  13.         super.onCreate(savedInstanceState);
  14.         setContentView(R.layout.main);
  15.         System.out.println("Activity1---onCreate");
  16.         mBtn = (Button)findViewById(R.id.button1);
  17.     }

  18.     public void GoToActivity2(View view){
  19.      Intent intent = new Intent(HelloActivityActivity.this , activity2.class);
  20.      startActivity(intent);
  21.     }
  22. @Override
  23. protected void onDestroy() {
  24. // TODO Auto-generated method stub
  25. //釋放所有資源
  26. super.onDestroy();
  27. System.out.println("Activity1---onDestory");
  28. }

  29. @Override
  30. protected void onPause() {
  31. // TODO Auto-generated method stub
  32. //此方法執行後,activity失去用戶焦點,
  33. super.onPause();
  34. System.out.println("Activity1---onPause");
  35. }

  36. @Override
  37. protected void onRestart() {
  38. // TODO Auto-generated method stub
  39. super.onRestart();
  40. System.out.println("Activity1---onRestart");
  41. }

  42. @Override
  43. protected void onResume() {
  44. // TODO Auto-generated method stub
  45. //此方法執行後,activity取得用戶焦點,
  46. super.onResume();
  47. System.out.println("Activity1---onResume");
  48. }

  49. @Override
  50. protected void onStart() {
  51. // TODO Auto-generated method stub
  52. //此方法執行後,用戶看的見activity,置方法監控影響UI的事件,隨時隨環境變化UI
  53. super.onStart();
  54. System.out.println("Activity1---onStart");
  55. }

  56. @Override
  57. protected void onStop() {
  58. // TODO Auto-generated method stub
  59. //此方法執行後,用戶無法看見activity,釋放所有在onStart()所有監控影響UI的方法
  60. super.onStop();
  61. System.out.println("Activity1---onStop");
  62. }
  63.     
  64. }
Activity B(activity2):
  1. package test.activity;

  2. import android.app.Activity;
  3. import android.content.Intent;
  4. import android.os.Bundle;
  5. import android.view.View;
  6. import android.widget.Button;

  7. public class activity2 extends Activity {
  8. private Button mBtn; 

  9. @Override
  10. protected void onCreate(Bundle savedInstanceState) {
  11. // TODO Auto-generated method stub
  12. super.onCreate(savedInstanceState);
  13. setContentView(R.layout.layout2);
  14. System.out.println("activity2---onCreate");
  15. mBtn = (Button)findViewById(R.id.button1);
  16. }
  17. public void BackToActivity1(View view){
  18. Intent intent = new Intent(activity2.this , HelloActivityActivity.class);
  19. startActivity(intent);
  20. }

  21. @Override
  22. protected void onDestroy() {
  23. // TODO Auto-generated method stub
  24. super.onDestroy();
  25. System.out.println("activity2---onDestory");
  26. }

  27. @Override
  28. protected void onPause() {
  29. // TODO Auto-generated method stub
  30. super.onPause();
  31. System.out.println("activtiy2---onPause");
  32. }

  33. @Override
  34. protected void onRestart() {
  35. // TODO Auto-generated method stub
  36. super.onRestart();
  37. System.out.println("activity2---onRestart");
  38. }

  39. @Override
  40. protected void onResume() {
  41. // TODO Auto-generated method stub
  42. super.onResume();
  43. System.out.println("activity2---onResume");
  44. }

  45. @Override
  46. protected void onStart() {
  47. // TODO Auto-generated method stub
  48. super.onStart();
  49. System.out.println("activity2---onStart");
  50. }

  51. @Override
  52. protected void onStop() {
  53. // TODO Auto-generated method stub
  54. super.onStop();
  55. System.out.println("activity2---onStop");
  56. }


  57. }

實驗一:執行activity A後關閉,觀察生命週期變化。
變化如下圖。

發現一個activity開始運行到出現在屏幕上會經過生命週期為onCreate()->onStart()->onResume(),關閉activity會經過生命週期為onPause()->onStop()->onDestory()。
實驗二:執行activity A後,A啟動activity  B,B再啟動A,接著按"BACK"直到結束整個activity,觀察生命週期變化。
變化如下圖。
觀察activity A啟動時會經過生命週期onCreate()->onStart()->onResume(),A啟動activity B會經過生命週期就比較複雜,首先要啟動B,A會先onPause(),接著換B要運行了,B會執行onCreate()->onStart()->onResume(),B取得用戶焦點,因此,A執行onStop()。執行到此我們來想想task狀態,task目前總共放有兩個activity,下層是最先執行的A,頂層是從A啟動的B,而從B啟動的A正在執行。現在接著按"BACK"按鈕,觀察A先執行onPause()讓在task頂層的B恢復,B執行onRestart()->onStart()->onResume(),A執行onStop()->onDedtory(),A結束,再按一次"BACK"按鈕,觀察B一樣先執行onPause()讓task中剩下的A恢復,A執行onRestart()->onStart()->onResume(),B執行onStop()->onDestory(),B結束,再按一次"BACK"按鈕,應用程式關閉,A執行onPause()->onStop()->onDestory(),A結束。


沒有留言:

張貼留言