embedded linux ,android

2010年10月29日 星期五

Android Activity 生命週期



這篇文章將介紹Activity的生命週期
利用一個demo project 
您可以測試各種情況下 activity 的呼叫流程






activitydemo.java
package com.wandroide.tw;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

public class activitydemo extends Activity {
    private static final String TAG = "ActivityDemo";
  
    private EditText mEditText = null;
    private String   mString   = null;
    private Button   mButton   = null;
  
    private Button.OnClickListener button_listener = new OnClickListener()
    {
 public void onClick(View v)
 {
     Intent intent = new Intent();
            intent.setClass(activitydemo.this, otheractivity.class);
     startActivity(intent);
        } 
    };
    
    /** 
     * 程式一執行就執行onCreate()
     * 所以初始化工作要在這邊做 
     * 或 
     * 當程式執行過onDestory() 被銷毀後
     * 再去按此程式 就會進來執行
     * 這時候程式還沒顯示在裝置螢幕上*/
    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        mEditText = (EditText)findViewById(R.id.editText);
        mButton=(Button)findViewById(R.id.button);
        mButton.setOnClickListener(button_listener);
        Log.e(TAG, "----onCreate----");
        if( savedInstanceState != null )
        {
            mString = savedInstanceState.getString("EditTextValue");
            Log.e(TAG, "====mString =" + mString );
        }
     }
    
    /** 
     * 執行完onCreate()後 就會執行onStart()
     * 或
     * 程式執行完onStop()後 再回到此程式 則會執行onRestart()-->onStart() 
     * 這個時候程式介面已經顯示在裝置螢幕上
     * 但還無法跟user互動*/
    @Override  
    protected void onStart() 
    {  
        super.onStart();
        Log.e(TAG, "----onStart----");
        if( mString != null )
        {
            mEditText.setText(mString);
            Log.e(TAG, "====mString =" + mString );
        }
     }  
     
    /** 
     * 程式執行完onStop()後 再回到此程式 
     * 則會執行onRestart() */
    @Override  
    protected void onRestart() 
    {  
        super.onRestart();  
        Log.e(TAG, "----onRestart----");  
    }  
     
    /** 
     * 執行完onStart()後 就會執行onResume()
     * 或
     * 程式執行完onPause()後 再回到前景 則會執行onResume() 
     * 這個時候程式介面顯示在裝置螢幕上
     * 而且可以跟user互動*/
    @Override  
    protected void onResume() 
    {  
        super.onResume();  
        Log.e(TAG, "----onResume----");  
    }  
     
    /** 
     * 畫面被另一個activity遮住或遮住一部分
     * 就會執行onPause() 
     * 這個時候程式介面顯示在裝置螢幕上
     * 但無法跟user互動*/
    @Override  
    protected void onPause() 
    {  
        super.onPause();
        Log.e(TAG, "----onPause----");
    }  
     
    /** 
     * 執行onPause()後 就會執行onStop() 
     * 這個時候程式介面沒有在裝置螢幕上*/
    @Override  
    protected void onStop() 
    {  
        super.onStop();  
        Log.e(TAG, "----onStop----");  
    }  
    
    /** 
     * 執行onStop()後 就會執行onDestory() 
     * 這個時候程式介面沒有在裝置螢幕上*/  
    @Override  
    protected void onDestroy() 
    {  
        super.onDestroy();  
        Log.e(TAG, "----onDestroy----");  
    }  
    
    /** 
     * 有另一個activity開啟時 會執行onSaveInstanceState()
     * 若此activity被destory後 再執行此activity 
     * 或
     * 切換螢幕方向 Ctrl + F12 則執行此函數
     * 且onCreate() 帶著savedInstanceState參數 */  
    @Override
    protected void onSaveInstanceState(Bundle outState) 
    {  
        super.onSaveInstanceState(outState);
        mString = mEditText.getText().toString();
        outState.putString("EditTextValue",mString);
        Log.e(TAG, "----onSaveInstanceState----");  
    } 
    
    /** 
     * 切換螢幕方向 Ctrl + F12
    * onDestory() --> onCreate(帶著savedInstanceState參數)
    * --> onStart() --> onRestoreInstanceState(帶著savedInstanceState參數) 
     * --> onResume() */
    @Override
    public void onRestoreInstanceState(Bundle savedInstanceState) 
    {
        super.onRestoreInstanceState(savedInstanceState);
        String myString = savedInstanceState.getString("EditTextValue");
        Log.e(TAG, "----onRestoreInstanceState----");
        Log.e(TAG, "====myString =" + myString );
    }
}

otheractivity.java
package com.wandroide.tw;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

public class otheractivity extends Activity {
    private static final String TAG = "OtherActivity";
  
    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.other);
        Log.e(TAG, "----other onCreate----");
    }
    
    @Override  
    protected void onStart() 
    {  
        super.onStart();  
        Log.e(TAG, "----other onStart----");  
    }  
     
    @Override  
    protected void onRestart() 
    {  
        super.onRestart();  
        Log.e(TAG, "----other onRestart----");  
    }  
     
    @Override  
    protected void onResume() 
    {  
        super.onResume();  
        Log.e(TAG, "----other onResume----");  
    }  
     
    @Override  
    protected void onPause() 
    {  
        super.onPause();
        Log.e(TAG, "----other onPause----");  
    }  
     
    @Override  
    protected void onStop() 
    {  
        super.onStop();  
        Log.e(TAG, "----other onStop----");  
    }  
    
    @Override  
    protected void onDestroy() 
    {  
        super.onDestroy();  
        Log.e(TAG, "----other onDestroy----");  
    }  
    
    @Override
    protected void onSaveInstanceState(Bundle outState) 
    {  
        super.onSaveInstanceState(outState);
        Log.e(TAG, "----other onSaveInstanceState----");  
    } 
    
    @Override
    public void onRestoreInstanceState(Bundle savedInstanceState) 
    {
        super.onRestoreInstanceState(savedInstanceState);
        Log.e(TAG, "----other onRestoreInstanceState----");
    }
}

沒有留言:

張貼留言