學習技術,對技術文檔或者經典技術書籍來說。指望看一遍就懂,那是不大可能的。所以沒事回頭總結下只是,不要認爲基礎就不去總結。
進來回顧了下Activity的生命週期,看了相關相關官方文檔,對以前的認知有了新的改善。
首先來看下一張經典的生命週期流程圖:
相信大家都很熟悉吧,創建實例、初始化、銷燬實例等;
1.啓動Activity:系統會先調用onCreate方法,然後調用onStart方法,最後調用onResume,Activity進入運行狀態。
2.當前Activity被其他Activity覆蓋其上或被鎖屏:系統會調用onPause方法,暫停當前Activity的執行。
3.當前Activity由被覆蓋狀態回到前臺或解鎖屏:系統會調用onResume方法,再次進入運行狀態。
4.當前Activity轉到新的Activity界面或按Home鍵回到主屏,自身退居後臺:系統會先調用onPause方法,然後調用onStop方法,進入停滯狀態。
5.用戶後退回到此Activity:系統會先調用onRestart方法,然後調用onStart方法,最後調用onResume方法,再次進入運行狀態。
6.當前Activity處於被覆蓋狀態或者後臺不可見狀態,即第2步和第4步,系統內存不足,殺死當前Activity,而後用戶退回當前Activity:再次調用onCreate方法、onStart方法、onResume方法,進入運行狀態。
7.用戶退出當前Activity:系統先調用onPause方法,然後調用onStop方法,最後調用onDestory方法,結束當前Activity。
我們就來操作一下這個Activity,看看它的生命週期到底是個什麼樣的過程:
package com.example.demo.Activitydemo; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; public class MainActivity extends AppCompatActivity { @Override //創建Activity時調用 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.i("1", "onCreate創建"); } @Override protected void onStart() { super.onStart(); Log.i("2", "onStart啓動"); } @Override protected void onResume() { super.onResume(); Log.i("3", "onResume初始化"); } //Activity被覆蓋到下面或者鎖屏時被調用 @Override protected void onPause() { super.onPause(); Log.i("4", "onpause正在停止"); //有可能在執行完onPause或onStop後,系統資源緊張將Activity殺死,所以有必要在此保存持久數據 } //退出當前Activity或者跳轉到新Activity時被調用 @Override protected void onStop() { super.onStop(); Log.i("5", "onStop停止"); } //退出當前Activity時被調用,調用之後Activity就結束了 @Override protected void onDestroy() { super.onDestroy(); Log.i("6", "ondestroy銷燬"); } /** * Activity被系統殺死時被調用. * 例如:屏幕方向改變時,Activity被銷燬再重建;當前Activity處於後臺,系統資源緊張將其殺死. * 另外,當跳轉到其他Activity或者按Home鍵回到主屏時該方法也會被調用,系統是爲了保存當前View組件的狀態. * 在onPause之前被調用. */ }
1.啓動Activity:我們打開應用時先後執行了onCreate()->onStart()->onResume三個方法,看一下LogCat視窗如下:
在系統調用了onCreate和onStart之後,調用了onResume,自此,Activity進入了運行狀態。
2.按HOME鍵;當我們打開應用程序時,比如瀏覽器,我正在瀏覽NBA新聞,看到一半時,我突然想聽歌,這時候我們會選擇按HOME鍵,然後去打開音樂應用程序,而當我們按HOME的時候,Activity先後執行了onPause()->onStop()這兩個方法,這時候應用程序並沒有銷燬。
3.退出:當我們按BACK鍵時,我們這個應用程序將結束,這時候我們將先後調用onPause()->onStop()->onDestory()三個方法
4.最後onDestory方法被調用,標誌着終結。
5.而當我們再次啓動ActivityDemo應用程序時,則先後分別執行了onRestart()->onStart()->onResume()三個方法.