先發一張官方的Activity生命周期圖解
onCreate():
當activity是被創建時候,會自動運行該方法。該方法做一些初始化動作,比如創建views,設置數據到list等等,該方法提供了一個Bundle類型的變量,該變量中有這個activity以前的狀態信息,前提是以前存過這些信息。這個方法執行完后執行的是onStart()方法;若在onCreate方法中加入finish()方法,onCreate下一個運行onDestroy方法
onRestart():
把activity從onStop狀態喚醒時,會用onRestart方法,該方法優先於再次運行的onStart,運行完onRestart之后運行onStart。若在onRestart()方法中加入finish()語句,則還是會繼續運行onStart及后面的狀態方法直到onDestroy運行完
onStart():
當activity對用戶可見時會調用onStart,當activity在前台顯示時,會運行onResume;當activity還沒在前台顯示就被隱藏(停止狀態)了會運行onStop(),比如在onStart方法中用了finish()方法的話,onStart()之后就會直接運行onStop->onDestroy。
onResume():
當activity開始與用戶交互時,會調用onResume,並且為了用戶操作此時該activity位於activity棧的頂部。經過某些操作后該方法執行完后執行的是onPause()
onPause():
當一個activity運行到onResume方法后,不管是這個activity要銷毀還是要暫停或停止,都會調用該方法。這個方法之后有可能是onResume也有可能是onStop,若是在這個activity-A中打開一個不完全覆蓋這個activity-A的新activity-B,那么activity-A就會是onPause狀態,當activity-B退出時,activity-A就直接運行onResume(前提是onPause的方法執行完了,否則會等onPause方法執行完后才運行onResume方法,所以不建議在這個方法中執行CPU密集的操作)。若是需要退出activity-A,那么下一個就會執行onStop。onPause()用於提交未保存發生變化了的持久化數據,及停止動畫及其他其他比較消耗CPU的事件(比如廣播接收器,傳感器(比如GPS),或者消耗電量的資源),這是為了更好的運行新的activity
onStop():
當這個activity完全看不見的時候,會調用onStop方法,因為另一個activity會調用onResume並且覆蓋這個activity。以下三種情況都會使這個activity調用onStop()方法,第一種是一個新的activity被執行,第二種是一個已經存在的activity被切換到最前端,第三種是這個activity要被銷毀。如果通過用戶召回這個activity,那么會調用onRestart方法;若這個activity要被銷毀,則調用onDestroy方法
onDestroy():
當activity銷毀前會調用該方法,比如發生如下情況:activity調用了finish()方法來結束這個activity,或者因為系統為了節省空間而臨時銷毀這個activity,這兩個情況可以通過isFinishing()方法判斷
總結:
當用戶自己退出程序的時候,建議在onStop方法中保存數據;
當用戶打開一個新的activity的時候,建議通過onSaveInstanceState來保存數據;這里在網上看到很多人說應該放在onPause里保存,其實我覺得在打開新的一個activity的時候,或者將程序至於后台的時候,都會默認調用onSaveInstanceState方法,而且在這種暫停的狀態下,Android的內存管理機制也不太會殺死這種狀態的activity。而用onPause保存的時候,若是下一個執行onResume的方法的話,會影響速度,當然數據量小的話也感覺不出來
【以上純屬個人觀點,歡迎指正,謝謝!】