可以用上面這張圖簡單解釋 Activity 的四個主要狀態
這對開發者而言,我們可以決定在什麼狀態作什麼事情,注意我們所撰寫的每一個Activity都有繼承(extends)一個Activity類別,也因此我們可覆寫很多狀態的方法,例如以下:
publc void
onCreate(Bundle savedInstanceState); //initial >
onStart()
publc void onStart(); //stop > active
publc void onResume(); //pause > active
publc void onPause(); //active > pause
publc void onStop(); //active > stop
publc void onDestroy(); //active
> killed
回頭看看一開始的HelloWorldActivity.java,其實我們已經覆寫了一個方法了
public void onCreate(Bundle
savedInstanceState)
onCreate()方法是每個Activity第一個被虛擬機呼叫的方法,它是你的Activity的入口點,通常都
是在這邊作一些初始化的動作(例如:設置頁面或變數)。
至於在onCreate()方法中一定會呼叫setContentView();
這個就是告訴這支Activity它所對應的View是誰,以HelloWorldActivity.java為例
它的View就是R.layout.main
也就是 /res/layout/main.xml
所以,其實這個方法你也可以設定其他Activity的View
例如今天Hello_World project底下還有一個
XXXActivity.java 而它所對應的layout是xxx.xml
你也可以直接在HelloWorldActivity.java 這樣寫 > setContentView(R.layout.xxx)
這樣子你的HelloWorldActivity.java 所對應的View就會變成/res/layout/xxx.xml了
因此透過setContentView你可以在你的Activity中作layout的切換,例如:當User在某個layout點
下button之後要切換另一個layout。
甚至也可以設定這個Activity所對應的View是一個元件,例如:Button
super.onCreate(savedInstanceState); Button button = new Button(this); button.setText("Hello World"); setContentView(button);
接著用一個簡單的 Activity 來實作這些方法,並體會它的過程:
package org.sample.android; import android.app.Activity; import android.os.Bundle; import android.util.Log; public class TestLifeCycleActivity extends Activity { private static final String LOG_TAG = TestLifeCycleActivity.class.getSimpleName(); /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Log.i(LOG_TAG, "onCreate"); } @Override protected void onStart() { // TODO Auto-generated method stub super.onStart(); Log.i(LOG_TAG, "onStart"); } @Override protected void onPause() { // TODO Auto-generated method stub super.onPause(); Log.i(LOG_TAG, "onPause"); } @Override protected void onResume() { // TODO Auto-generated method stub super.onResume(); Log.i(LOG_TAG, "onResume"); } @Override protected void onStop() { // TODO Auto-generated method stub super.onStop(); Log.i(LOG_TAG, "onStop"); } @Override protected void onDestroy() { super.onDestroy(); Log.i(LOG_TAG, "onDestroy "); } }接著可以在 DDMS 的 LogCat中看到程式載不同狀態間切換的紀錄訊息
沒有留言:
張貼留言