在談Activity生命周期之前先談下Activity棧:
Activity棧保存瞭已經啟動並且還沒有終止的所有的Activity,並且我們知道棧是遵從“後進先出”的規則,那麼Activity棧同樣也遵從這樣的規則。
Activity的狀態與其在Activity棧的位置有著密切的關系。不僅如此,Android系統在資源不足時,也是通過Activity棧來選擇哪些Activity是可以被終止的,一般來講,Activity系統會優先選擇終止處於目前是停止狀態並且比較靠近Activity棧底的Activity。
結合一個例子來瞭解下Activity棧吧
Activty的生命周期:
Activity生命周期是指Activity從啟動到銷毀的過程。
首先來看下Activity的生命周期圖:
Activity有四種狀態:活動狀態 暫停狀態 停止狀態 非活動狀態
先看下Actvity的七個生命周期函數以及說下這幾個函數都是在什麼時候調用的:
函數 |
是否可終止 |
說明 |
onCreate |
否 |
當Activity第一次啟動時將調用這個函數,在這個函數裡我們要做的是要進行Activity的初始化,例如創建指定Activity的佈局文件、數據的綁定等 |
onStart |
否 |
當Activity顯示在屏幕上的時候將調用這個函數 |
onRestart |
否 |
當Activity從停止狀態進入活動狀態前,將調用這個函數 |
onResume |
否 |
當Activity獲得焦點,也就是說Activity能夠與用戶交互的時候將調用這個函數,這個時刻Activity位於Activity棧的頂端 |
onPause |
是 |
當Activity進入暫停狀態將調用這個函數,但在這個時刻我們一般用來保存持久的數據或者釋放占用的資源。 |
onStop |
是 |
當Activity完全被遮時將調用這個函數,記住是全部被遮 |
onDestory |
是 |
當Activity在被終止前,即將進入非活動狀態前,將調用該函數,一般以下兩種情況下會調用onDestory函數1、調用Activity的finish方法2、當Android系統資源不足的時候 |
知道瞭這些函數和結合上面的圖我們來看一個例子來更好的理解下Android的生命周期
package com.szy.activity;
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;
public class MainActivity extends Activity
{
private final static String TAG="MainActivity";
private Button secondBtn=null;
private Button thirdBtn=null;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
secondBtn=(Button)findViewById(R.id.secondBtn);
thirdBtn=(Button)findViewById(R.id.thirdBtn);
secondBtn.setOnClickListener(listener);
thirdBtn.setOnClickListener(listener);
Log.i(TAG, "MainActivity–>onCreate");
}
@Override
protected void onDestroy()
{
super.onDestroy();
Log.i(TAG, "MainActivity–>onDestroy");
}
@Override
protected void onPause()
{
super.onPause();
Log.i(TAG, "MainActivity–>onPause");
try
{
Thread.sleep(2000);
} catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
protected void onRestart()
{
super.onRestart();
Log.i(TAG, "MainActivity–>onRestart");
}
@Override
protected void onResume()
{
super.onResume();
Log.i(TAG, "MainActivity–>onResume");
}
@Override
protected void onStart()
{
super.onStart();
Log.i(TAG, "MainActivity–>onStart");
}
@Override
protected void onStop()
{
super.onStop();
Log.i(TAG, "MainActivity–>onStop");
}
private OnClickListener listener=new OnClickListener()
{
@Override
public void onClick(View v)
{
Button btn=(Button)v;
Intent intent=new Intent();
switch (btn.getId())
{
case R.id.secondBtn:
intent.setClass(MainActivity.this, SecondActivity.class);
break;
case R.id.thirdBtn:
intent.setClass(MainActivity.this, ThirdActivity.class);
break;
}
startActivity(intent);
}
};
}
view plainprint?
package com.szy.activity;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
public class SecondActivity extends Activity {
private static final String TAG = "MainActivity";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.second);
Log.i(TAG, "SecondActivity–>onCreate");
}
@Override
protected void onDestroy()
{
super.onDestroy();
Log.i(TAG, "SecondActivity–>onDestroy");
}
@Override
protected void onPause()
{
super.onPause();
Log.i(TAG, "SecondActivity–>onPause");
}
@Override
protected void onRestart()
{
super.onRestart();
Log.i(TAG, "SecondActivity–>onRestart");
}
@Override
protected void onResume()
{
super.onResume();
Log.i(TAG, "SecondActivity–>onResume");
}
@Override
protected void onStart()
{
super.onStart();
Log.i(TAG, "SecondActivity–>onStart");
}
@Override
protected void onStop()
{
super.onStop();
Log.i(TAG, "SecondActivity–>onStop");
}
}
view plainprint?
package com.szy.activity;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
public class ThirdActivity extends Activity
{
private static final String TAG = "MainActivity";
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.third);
Log.i(TAG, "ThirdActivity–>onCreate");
}
@Override
protected void onDestroy()
{
super.onDestroy();
Log.i(TAG, "ThirdActivity–>onDestroy");
}
@Override
protected void onPause()
{
super.onPause();
Log.i(TAG, "ThirdActivity–>onPause");
}
@Override
protected void onRestart()
{
super.onRestart();
Log.i(TAG, "ThirdActivity–>onRestart");
}
@Override
protected void onResume()
{
super.onResume();
Log.i(TAG, "ThirdActivity–>onResume");
}
@Override
protected void onStart()
{
super.onStart();
Log.i(TAG, "ThirdActivity–>onStart");
}
@Override
protected void onStop()
{
super.onStop();
Log.i(TAG, "ThirdActivity–>onStop");
}
}
源代碼下載:http://up.aiwalls.com/2011/1014/20111014011129696.rar