2025-03-25

在談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
 

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *