Activity的生命週期
Activity是由Activity棧進行管理,當來到一個新的Activity後,此Activity將被加入到Activity棧頂,之前的Activity位於此Activity底部。Activity一般意義上來講有四種狀態:
1、當Activity位於棧頂時,此時正好處於螢幕最前方,此時處於執行狀態。
2、當Activity失去了焦點但仍然對使用者可見(如棧頂的Activity是透明或者棧頂Activity並不是鋪滿整個手機螢幕),此時處於暫停狀態;
3、當Activity被其他Activity完全遮擋,此時此Activity對使用者不可見,此時處於停止狀態;
4、當Activity由於人為或系統原因被銷燬,此時處於銷燬狀態;
在每個不同的狀態階段,Android系統對Activity內相應的方法進行了回撥。因此,我們在程式中寫Activity時,一般都繼承Activity類並重寫相應的回撥方法。
圖中詳細的給出了Activity整個生命週期的過程,以及在不同的狀態期間相應的回撥方法。
1、Activity例項是由系統自動建立,並在不同的狀態期間回撥相應的方法。一個最簡單的完整的Activity生命週期會按照如下順序回撥:OnCreate -> onStart -> onResume -> onPause -> onStop-> onDestory。
2、當執行onStart回撥方法時,Activity開始被使用者所見,一直到onStop之前,此階段Activity都是被使用者可見
3、當執行到OnResume回撥方法時,Activity可以響應使用者互動,一直到onPause方法之前此階段稱之為 foreground lifetime
在實際應用場景中,假設A Activity位於棧頂,此時使用者操作,從A Activity 跳轉到B Activity 。那麼對AB來說,具體會回撥那些生命週期中的方法呢?回撥方法的具體回撥順序又是怎麼樣呢?
開始時,A被例項化,執行的回撥有 A:OnCreate -> A:onStart -> A:onResume。
當用戶點選A中按鈕來到B,假設B全部遮擋住了A,將依次執行 A:onPause -> B:onCreate -> B:onStart-> B:onResume->A:onStop.
此時如果點選Back鍵,將依次執行B:onPause ->A: onRestart -> A: onStart ->A:onResume ->B:onStop -> B:onDestory.
至此,Activity棧中只有A, 此時如果按下Back鍵,系統返回到桌面並依次執行 A:onPause -> A:onStop -> A:onDestroy。
如果按下Home鍵主要區別在於是否會執行onDestroy。