Activity是Android應用程序中使用頻率最高、最基本的組件。一個Activity對應一個UI
首先解釋一下什麼是生命週期:
- 應用程序的生命週期,是指從創建到結束的全過程。android應用程序的生命週期都是Android框架進行管理,而不是由應用程序直接控制。每個應用的內存和進程都是由進行時獨立管理的,每個Android的應用程序在自己的進程中運行。
- 應用程序組件有其生命週期:由Android初始化他們,以相應的Intent(即相應意圖),直到結束,實例被銷燬。
- Activity被一個Activity棧管理,堆棧中保存對象的實例,在一個人物中可能存在多個同一Activity實例
應用程序的生命週期中的五種狀態:啓動,運行,暫停,停止,銷燬
- 啓動:Activity被壓入棧頂。
- 運行:Activity可見並獲得焦點,與用戶進行交互
- 暫停:Activity可見但失去焦點
- 停止:Activity被另一個Activity完全覆蓋,不可見,系統可以隨時將其釋放
- 銷燬:系統將Activity從內存中刪除,Activity被彈出棧
Activity的生命週期圖:來自於ADT
爲了測試生命週期,可以寫代碼測試Log.d();可以顯示出測試信息
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d("life cycle","onCreate");
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
Log.d("life cycle","onDestroy");
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
Log.d("life cycle","onPause");
}
@Override
protected void onRestart() {
// TODO Auto-generated method stub
super.onRestart();
Log.d("life cycle","onRestart");
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
Log.d("life cycle","onResume");
}
@Override
protected void onStart() {
// TODO Auto-generated method stub
super.onStart();
Log.d("life cycle","onStart");
}
@Override
protected void onStop() {
// TODO Auto-generated method stub
super.onStop();
Log.d("life cycle","onStop");
}
}
- 當正常啓動的時候,會依次調用onCreate()、onStart、onResume()
- 當正常關閉的時候,又會依次調用onPause()->onStop()->onDestroy(),被殺死
- 而例如來電話等,進程突然被打斷,先是onPause(),失去焦點,而後onStop,程序暫停
- 掛掉電話後,程序會先onReStart()重新開始,接着onStart()->onResume()繼續執行
- 有時候活動會因爲某些情況突然失去焦點,這時候onPause,暫停,回覆後onResume