Android基礎-------Activity的生命週期

Activty的生命週期


1.什麼是生命週期

  • 所謂的生命週期通俗的講,就是Activity從無到有,然後經過各種狀態,再從有到無的過程
    打個比方:
    (1)一個人的出生就好比Activity的產生 (從無到有
    (2)人生經歷的各個階段就是Activity各種狀態的變換 (經歷各種狀態
    (3)待到人們結局了一生的經歷變換之後,他的生命也將就此終結(從有到無

2.Activity 底層的四種狀態

  • (1) 當Activity位於棧頂時,此時正好處於屏幕最前方,此時處於運行狀態
  • (2) 如果一個活動被另一個非全屏的活動所覆蓋,那麼該活動就失去了焦點,它將會處於暫停狀態
  • (3) 如果一個活動A,被另一個活動B完全遮擋覆蓋,這時候活動A是停止狀態
  • (4) 當Activity由於人爲或系統原因(如低內存等)被銷燬,此時處於銷燬狀態這裏寫圖片描述

在這四種常見的生命週期之間還有一些其他的生命週期作爲過度,下面我們繼續來學習以下


3.一個Activity經歷的生命週期的過程

測試代碼可以寫在 MainActivity.java

  • (1) onCreate:與onDestroy配對,表示Activity正在被創建,這是生命週期的第一個方法。在這個方法中可以做一些初始化的工作(加載佈局資源、初始化Activity所需要的數據等),耗時的工作在異步線程上完成。
@Override  
public void onCreate(Bundle savedInstanceState){  
    super.onCreate(savedInstanceState);  
    setContentView(R.layout.activity_main);  
    System.out.println("onCreate");  
    Log.e(TAG, "start onCreate~~~");  
} 
  • (2) onRestart:表示Activity正在重新啓動。一般情況下,在當前Activity從不可見重新變爲可見的狀態時onRestart就會被調用。這種情形一般是由於用戶的行爲所導致的,比如用戶按下Home鍵切換到桌面或者打開了一個新的Activity(這時當前Activity會暫停,也就是onPause和onStop被執行),接着用戶有回到了這個Activity,就會出現這種情況。
@Override  
public void onRestart(){  
    super.onRestart();  
    System.out.println("onRestart");  
    Log.e(TAG, "start onRestart~~~");  
}
  • (3) onStart:與onStop配對,表示Activity正在被啓動,並且即將開始。但是這個時候要注意它與onResume的區別。兩者都表示Activity可見,但是onStart時Activity還正在加載其他內容,正在向我們展示,用戶還無法看到,即無法交互。
@Override  
public void onStart(){  
    super.onStart();  
    System.out.println("onStart");  
    Log.e(TAG, "start onStart~~~");  
}
  • (4) onResume:與onPause配對,表示Activity已經創建完成,並且可以開始活動了,這個時候用戶已經可以看到界面了,並且即將與用戶交互(完成該週期之後便可以響應用戶的交互事件了)。
@Override  
public void onResume(){  
    super.onResume();  
    System.out.println("onResume");  
    Log.e(TAG, "start onResume~~~");  
}
  • (5) onPause:與onResume配對,表示Activity正在暫停,正常情況下,onStop接着就會被調用。在特殊情況下,如果這個時候用戶快速地再回到當前的Activity,那麼onResume會被調用(極端情況)。一般來說,在這個生命週期狀態下,可以做一些存儲數據、停止動畫的工作,但是不能太耗時,如果是由於啓動新的Activity而喚醒的該狀態,那會影響到新Activity的顯示,原因是onPause必須執行完,新的Activity的onResume纔會執行。
@Override  
public void onPause(){  
    super.onPause();  
    System.out.println("onPause");  
    Log.e(TAG, "start onPause~~~");  
}
  • (6) onStop:與onStart配對,表示Activity即將停止,可以做一些稍微重量級的回收工作,同樣也不能太耗時(可以比onPause稍微好一點)。
@Override  
public void onStop(){  
    super.onPause();  
    System.out.println("onStop");  
    Log.e(TAG, "start onStop~~~");  
}
  • (7) onDestroy:與onCreate配對,表示Activity即將被銷燬,這是Activity生命週期的最後一個回調,我們可以做一些回收工作和最終的資源釋放(如Service、BroadReceiver、Map等)。
@Override  
public void onDestory(){  
    super.onPause();  
    System.out.println("onDestory");  
    Log.e(TAG, "start onDestory~~~");  
}

這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章