HelloWorld 目錄結構之2(Activity生命週期和Trace Log方法)


上篇介紹 Android 4個基本模組以及目錄結構,本篇提供簡單的偵錯方式以及針對 Activity 再做更深入的研究,經過實機測試,可以證明程序的確是照著我們的寫法來運作,若是想進一步得到程序中的數值,就必須使用其他方法來測試,可以使用 Log 類別來達成, Log 提供 5 個簡單的方法來追蹤程序的進行,我們把上篇的 MainActivity.java 改為

MainActivity.java

   1:  package com.example.helloworld;
   2:   
   3:  import android.os.Bundle;
   4:  import android.util.Log;
   5:  import android.app.Activity;
   6:   
   7:  public class MainActivity extends Activity {
   8:      
   9:      @Override
  10:      public void onCreate(Bundle savedInstanceState) {
  11:          
  12:          Log.v("Trace Log", "Log1");
  13:          
  14:          super.onCreate(savedInstanceState);
  15:          setContentView(R.layout.activity_main);
  16:          
  17:          Log.i("Trace Log", "Log2");
  18:         
  19:      }
  20:      
  21:  }


第 4 行匯入 Log 類別,讓我們在後面的程式碼中可以使用
第 12 行 Log.v("Trace Log", "Log1"); 第 1 個參數為 Tag (標籤名稱), 第 2 個參數為顯示內容
第 17 行 Log.i("Trace Log", "Log2"); i 和 v 的差別為在 LogCat 中顯示的顏色不同

改完程式碼之後,執行程序吧,執行程序後點擊 Eclipse 中的 LogCat 視窗來查看顯示內容







可以看到顯示的 Text 相當多,因為預設的情況不會過濾顯示的 Text 內容,我們可以在左邊的 Save Filter 加入自訂的過濾器,可以命名過濾器的名稱以及過濾的項目等等,











設定完過濾器之後再執行,可以看到顯示的 Text 變為 2 個







這就是簡單的 Trace Log 的方式

接下來我們再對 Activity 進一步的研究,查看 Android API 可以發現 Activity 本身有 20 ~ 30 種方法可以使用, 其中重要的就是掌控其生命週期的方法, 分別有 onCreate( ) , onStart( ) , onResume( ) , onPause( ) , onStop( ) , onRestart( ) ,onDestroy( ), 對應不同的生命週期狀態,請參考 Android API 提供的生命週期圖,為了方便觀察其變化我們將 MainActivity.java 再次修改

MainActivity.java

   1:  package com.example.helloworld;
   2:   
   3:  import android.os.Bundle;
   4:  import android.util.Log;
   5:  import android.app.Activity;
   6:   
   7:  public class MainActivity extends Activity {
   8:      
   9:      final String tt= "Trace Log";
  10:      
  11:      @Override
  12:      public void onCreate(Bundle savedInstanceState) {
  13:          
  14:          super.onCreate(savedInstanceState);
  15:          setContentView(R.layout.activity_main);
  16:       
  17:          Log.i(tt, "onCreate");
  18:      }
  19:      
  20:      public void onStart(){
  21:          super.onStart();
  22:          
  23:          Log.i(tt, "onStart");
  24:      }
  25:      
  26:      public void onResume(){
  27:          super.onResume();
  28:          
  29:          Log.i(tt, "onResume");
  30:      }
  31:      
  32:      public void onPause(){
  33:          super.onPause();
  34:   
  35:          Log.i(tt, "onPause");
  36:      }
  37:      
  38:      public void onRestart(){
  39:          super.onRestart();
  40:          
  41:          Log.i(tt, "onRestart");
  42:      }
  43:      
  44:      public void onStop(){
  45:          super.onStop();
  46:          
  47:          Log.i(tt, "onStop");
  48:      }
  49:      
  50:      public void onDestroy(){
  51:          super.onDestroy();
  52:     
  53:          Log.i(tt, "onDestroy");
  54:      }
  55:      
  56:  }
  57:


在第 9 行我使用 tt 來代替 "Trace Log" ,這樣之後的追蹤 Log, 只要輸入 tt, 或是 Ctrl + v 就能完成,接著在 20 , 26 , 32 , 38 , 44 , 50 行分別覆寫方法,並加入追蹤,執行程序看看吧,執行程序後可以發現依序印出, onCreate -> onStart -> onResume

 接著點選手機的 Home 鍵跳離程序,會印出 onPause -> onStop -> onDestroy , 此時程序並沒有停止







手機上再點擊程序,會發現印出 onCreate -> onStart -> onResume, 和開始程序時相同,由此可知只要我們在在這些掌控生命週期的方法中寫入需要的功能,就可以加強整個程序完整性,如跳出程序之前儲存資料,程序運作中若有來電的處理等等





0 意見:

張貼留言

Twitter Delicious Facebook Digg Stumbleupon Favorites More

 
Design by Free WordPress Themes | Bloggerized by Lasantha - Premium Blogger Themes | Affiliate Network Reviews