今天我們終於要開始討論 Java 程式碼的部分,當我們建立新專案時,系統已經自動在 /Babylog/app/src/main/java/lincyu.babylog 這個資料夾下產生一個 CalendarActivity.java,其內容如下所示:
9 public class CalendarActivityOriginal extends ActionBarActivity {
10
11 @Override
12 protected void onCreate(Bundle savedInstanceState) {
13 super.onCreate(savedInstanceState);
14 setContentView(R.layout.activity_calendar);
15 }
16
17
18 @Override
19 public boolean onCreateOptionsMenu(Menu menu) {
20 // Inflate the menu; this adds items to the action bar if it is present.
21 getMenuInflater().inflate(R.menu.calendar, menu);
22 return true;
23 }
24
25 @Override
26 public boolean onOptionsItemSelected(MenuItem item) {
27 // Handle action bar item clicks here. The action bar will
28 // automatically handle clicks on the Home/Up button, so long
29 // as you specify a parent activity in AndroidManifest.xml.
30 int id = item.getItemId();
31 if (id == R.id.action_settings) {
32 return true;
33 }
34 return super.onOptionsItemSelected(item);
35 }
36 }
(由於10月7日後 iT邦幫忙的編輯/閱讀器才會幫程式碼加上行數,請讀者以筆者的行數為主)
首先來看第 9 行,CalendarActivity 這個類別繼承了 ActionBarActivity [1] 類別,光是這一行就有許多東西需要說明,首先,什麼是 Action Bar [2] ? 讀者是否還記得昨天給各位看過的執行畫面,執行畫面最上方有個黑底的一行,左邊是一個預設的綠色 Android 機器人圖示 (Icon),圖示旁邊是應用程式的名稱,而最右邊則有一個由三個正方形垂直排列而成的「選單」鍵,那一行即為 Action Bar,而 Action Bar 是在 Android 3.0 (API level 11) 才開始支援的,為了讓較低版本的 Android 系統也能夠使用 Action Bar,就有了 Android Support Library package 的誕生 [3],讀者可從第 3 行的 import 敘述得知 ActionBarActivity 是 Support Library 裡的一個類別,而從參考文件[1],我們可以知道 ActionBarActivity 繼承了 Activity,前幾天筆者已經提過,筆者認為初學者可以先把 Activity 想成是一個占滿螢幕的畫面,因此 CalendarActivity 就代表著我們 App 的第一個畫面。
接著來看 12 ~ 15 行的 onCreate,若要了解 onCreate,必須先對 Activity 的生命週期 (Lifecycle) 做個介紹,先前已經說過:初學者可以先把 Activity 想成是一個占滿螢幕的畫面,那麼為什麼一個畫面會有所謂的生命週期呢?請讀者試想一個情況,假設你正在玩一個遊戲,那個遊戲畫面可以想成是一個 Activity,這時有人打電話給您,此時遊戲畫面就會被接聽電話的畫面蓋掉,也可以說遊戲畫面進入了背景,假設您按下接聽扭,您就開始進行通話,等電話掛掉後,遊戲畫面又重新出現在前景了,最後當您決定離開遊戲時,這個遊戲畫面就被摧毀了,這樣一個前景到背景,又從背景到前景,最後被摧毀的一個過程,就是 Activity (畫面) 生命週期的一個範例,在 Android Developers 網站,有 Activity 生命週期的詳細解說 [4],在生命週期的重要階段都有相對應的回呼方法 (Call Methods),這些回呼方法分別是:onCreate, onStart, onResume, onPause, onStop, onRestart, onDestroy。對於 Activity 生命週期若想瞭解得更多,可參考筆者的書籍 [5]。
初步瞭解了 Activity 的生命週期後,讓我們回到 CalendarActivity.java 的 12 ~ 15 行,現在我們已經瞭解 onCreate 是 Activity 生命週期中的其中一個 Callback Method (也就是系統會幫我們呼叫 onCreate, 我們不需要自己去呼叫 onCreate),那麼它是什麼時候會被呼叫呢?就是當一個 Activity 被建立時,若有留意看參考文件 [4] 那張 Activity 的生命週期,不難發現 onCreate 在生命週期中只會被呼叫一次,因此通常我們會在 onCreate 裏面執行「靜態」的初始化,介面元件 (View) 的初始化通常就寫在 onCreate 裡。
今天我們瞭解了 Activity 的生命週期,明天將詳細解說 onCreate 裏面的內容,以及 CalendarActivity.java 尚未介紹到的部分:onCreateOptionsMenu 和 onOptionsItemSelected。
參考資料:
[1] ActionBarActivity | Android Developers, https://developer.android.com/reference/android/support/v7/app/ActionBarActivity.html
[2] Action Bar | Android Developers, http://developer.android.com/guide/topics/ui/actionbar.html
[3] Support Library | Android Developers, http://developer.android.com/tools/support-library/index.html
[4] Activity | Android Developers, http://developer.android.com/reference/android/app/Activity.html
[5] 林致宇, Android程式設計入門與應用(附範例光碟), 全華出版社, ISBN: 9789572194126, http://www.opentech.com.tw/search/bookinfo.asp?isbn=9789572194126&companyID=04383129