版權聲明:本文爲博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處連接和本聲明。
本文連接:https://blog.csdn.net/xiajun2356033/article/details/78741121
activity生命週期(這篇足夠了)
摘要
作安卓開發已經4年多了,所接觸的知識點也比較零散,在這裏記錄一下android方面的知識點,方便本身之後複習,有什麼不足的,以及錯誤的歡迎拍磚。android
activity
activity從開始到結束的四個狀態。
activity的生命週期。
activity的進程優先級。
activity的四個狀態
關於activity的四個狀態:
running-poused-stopped-killed函數
running->當前顯示在屏幕的activity(位於任務棧的頂部),用戶可見狀態。
poused->依舊在用戶可見狀態,可是界面焦點已經失去,此Activity沒法與用戶進行交互。
stopped->用戶看不到當前界面,也沒法與用戶進行交互 徹底被覆蓋.
killed->當前界面被銷燬,等待這系統被回收
關於activity四個狀態所在的生命週期:佈局
由上圖咱們得知:
Starting ——–>Running 所執行的生命週期順序 onCreate()->onstart()->onResume()動畫
當前稱爲活動狀態(Running),此activity所處於任務棧的top中,能夠與用戶進行交互。ui
Running ——>Paused 所執行Activity生命週期中的onPause().net
當前稱爲暫停狀態(Paused),該Activity已失去了焦點但仍然是可見的狀態(包括部分可見)。對象
Paused ——>Running所執行的生命週期爲:OnResume()blog
當前從新回到活動狀態(Running),此狀況用戶操做home鍵,而後從新回到當前activity界面發生。生命週期
Paused ——>Stoped所執行的生命週期爲:onStop()進程
該Activity被另外一個Activity徹底覆蓋的狀態,該Activity變得不可見,因此係統常常會因爲內存不足而將該Activity強行結束。
Stoped——>killed所執行的生命週期爲:onDestroy()
該Activity被系統銷燬。當一個Activity處於暫停狀態或中止狀態時就隨處可能進入死亡狀態,由於系統可能因內存不足而強行結束該Activity。
注:還有一種狀況因爲系統內存不足可能在Paused狀態中直接被系統殺死達到killed狀態。
activity的生命週期
oncreate()->onstart()->onResume()->onRestart()->onPouse()->onStop()->onDestory()
上面圖歸納了android生命週期的各個環節,描述了activity從生成到銷燬的過程。
onCreate():
當咱們點擊activity的時候,系統會調用activity的oncreate()方法,在這個方法中咱們會初始化當前佈局setContentLayout()方法。
onStart():
onCreate()方法完成後,此時activity進入onStart()方法,當前activity是用戶可見狀態,但沒有焦點,與用戶不能交互,通常可在當前方法作一些動畫的初始化操做。
onResume():
onStart()方法完成以後,此時activity進入onResume()方法中,當前activity狀態屬於運行狀態 (Running),可與用戶進行交互。
onPouse()
當另一個activity覆蓋當前的acitivty時,此時當前activity會進入到onPouse()方法中,當前activity是可見的,但不能與用戶交互狀態。
onStop()
onPouse()方法完成以後,此時activity進入onStop()方法,此時activity對用戶是不可見的,在系統內存緊張的狀況下,有可能會被系統進行回收。因此通常在當前方法可作資源回收。
onDestory()
onStop()方法完成以後,此時activity進入到onDestory()方法中,結束當前activity。
onRestart()
onRestart()方法在用戶按下home()以後,再次進入到當前activity的時候調用。調用順序onPouse()->onStop()->onRestart()->onStart()->onResume().
注: 當AActivity切換BActivity的所執行的方法:
AActivity:onCreate()->onStart()->onResume()->onPouse()
BActivity:onCreate()->onStart()->onResume()
AActivity:onStop()->onDestory()
當AActivity切換BActivity(此activity是以dialog形式存在的)所執行的方法:
AActivity:onCreate()->onStart()->onResume()->onPouse()
BActivity:onCreate()->onStart()->onResume()
Activity中onSaveInstanceState()和onRestoreInstanceState()
onSaveInstanceState(Bundle outState):
onSaveInstanceState函數在Activity生命週期中執行。
outState 參數做用 :
數據保存 : Activity 聲明週期結束的時候, 須要保存 Activity 狀態的時候, 會將要保存的數據使用鍵值對的形式 保存在 Bundle 對象中;
調用時機 :
Activity 被銷燬的時候調用, 也可能沒有銷燬就調用了;
按下Home鍵 : Activity 進入了後臺, 此時會調用該方法;
按下電源鍵 : 屏幕關閉, Activity 進入後臺;
啓動其它 Activity : Activity 被壓入了任務棧的棧底;
橫豎屏切換 : 會銷燬當前 Activity 並從新建立;
onSaveInstanceState方法調用注意事項 :
用戶主動銷燬不會調用 : 當用戶點擊回退鍵 或者 調用了 finish() 方法, 不會調用該方法;
調用時機不固定 : 該方法必定是在 onStop() 方法以前調用, 可是不肯定是在 onPause() 方法以前 仍是 以後調用;
佈局中組件狀態存儲 : 每一個組件都 實現了 onSaveInstance() 方法, 在調用函數的時候, 會自動保存組件的狀態, 注意, 只有有 id 的組件纔會保存;
關於默認的 super.onSaveInstanceState(outState) : 該默認的方法是實現 組件狀態保存的;
onRestoreInstanceState(Bundle outState):
方法回調時機 : 在 Activity 被系統銷燬以後 恢復 Activity 時被調用, 只有銷燬了以後重建的時候才調用, 若是內存充足, 系統沒有銷燬這個 Activity, 就不須要調用;
– Bundle 對象傳遞 : 該方法保存的 Bundle 對象在 Activity 恢復的時候也會經過參數傳遞到 onCreate() 方法中;
activity的進程優先級。
前臺進程>可見進程>service進程>後臺進程>空進程
前臺進程: 1.當前進程activity正在與用戶進行交互。 2.當前進程service正在與activity進行交互或者當前service調用了startForground()屬於前臺進程或者當前service正在執行生命週期(onCreate(),onStart(),onDestory()) 3.進程持有一個BroadcostReceiver,這個BroadcostReceiver正在執行onReceive()方法 1 2 3 可見進程: 1. 進程持有一個activity,這個activity再也不前臺,處於onPouse()狀態下,當前覆蓋的activity是以dialog形式存在的。 2. 進程有一個service,這個service和一個可見的Activity進行綁定。 1 2 service進程: 1.當前開啓startSerice()啓動一個service服務就能夠認爲進程是一個服務進程。 1 後臺進程: activity的onStop()被調用,可是onDestroy()沒有調用的狀態。該進程屬於後臺進程。 1 空進程: 改進程沒有任何運行的數據了,且保留在內存空間,並無被系統killed,屬於空進程。該進程很容易被殺死。 1 參考: http://blog.csdn.net/wuseyukui/article/details/48004687 http://blog.csdn.net/eclothy/article/details/24404079 ———————————————— 版權聲明:本文爲CSDN博主「android_Mr_夏」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處連接及本聲明。 原文連接:https://blog.csdn.net/xiajun2356033/article/details/78741121