Activity狀態:
① 當一個Activity 在屏幕的最上層時(對堆棧的最頂端),它就是屬于active 或者running 的狀態
② 如果一個Activity 失去焦點(focus)但還看得到它的畫面(比如:一個新的Activity 畫面并不是全屏幕或者它是一個半透明的情況),那失去焦點的Activity 則處在paused 的狀態。像這個失去焦點的Activity它還是完全活著的,并沒有消失。(活著的意思是指,Activity 自己本身所有的狀態及數據都還是存在的,也跟窗口管理程序window manager 保持聯系著),像這種paused 的Activity,會在一種情況下消失,那就是當系統的內存不夠用之時,系統會自動判斷,把不重要的Activity 移除。
③ 如果一個Activity 被其它的Activity 完全的遮蓋住時,它仍然保有全部的狀態及數據,但因為它已不再被使用者看見,所以它的畫面是被隱藏起來的(畫面不需要更新),當系統內存不足時,這種stop 狀態的Activity 時最先被系統考慮拿下來釋放內存的。
④ 當一個Activity 處于pause 或stop 的狀態時,系統可以要求Activity 結束(finish)或直接移除(kill)它。當它需要再度呈現在使用者面前時,它必須要能完整的重新啟動及回復先前的狀態。
Additional:
在系統中,所有的 Activities 都是被作為 Activity 棧來管理的。當一個新 Activity 被開始執行了,就被放到棧頂并成為可運行 Activity, 原來棧頂的 Activity 自然在他下面,并且不在顯示給用戶直到剛才新的 Activity 退出。
一個 Activity 有必要的四個狀態:
A、 活動狀態:如果一個 Activity 在屏幕的前面(也就是在棧頂),它就是活動狀態或運行狀態。
B、 暫停狀態:如果一個 Activity 失去了焦點但是仍然可見(也就是一個新的但是是非滿屏或透明的 Activity 在自己上面),但將被暫停,一個暫停的 Activity 完全是活的 ( 它維持所有的狀態和成員信息并 保持與窗口管理器 的連接 ), 但在系統內存極度低的時候,能被系統 kill.
C、 停止狀態:如果一個 Activity 完全被另外一個 Activity 遮蔽 ,就處于停止狀態。它仍然保持所有狀態和成員信息,然而它不在對用戶可見,窗口被隱藏,當系統無論何時需要內存資源時,它經常被 killed.
D、 重新恢復狀態:只有“ 暫停狀態”與“停止狀態”的 Activity 可以進入“ 重新恢復狀態”,當它再次呈現到用戶時,它必須完全重新啟動并恢復它以前的狀態。
Activity 狀態轉換圖:
在 Activity 生命周期中,三個主要的循環周期可能比較關鍵:
A、 完整生命周期:從調用 onCreate(Bundle) 開始到調用 onDestroy() 結束,當調用 onCreate(Bundle) 時, Activity 將初始化一些全局狀態,當調用 onDestroy() 時,釋放所有擁有的資源。例如,如果需要一個線程在后臺從網絡上下載數據,可以在 onCreate(Bundle) 創建它,在 onDestroy() 中銷毀它。
B、 可視的生命周期:從 onStart() 開始直到一個相應的 onStop() 被調用。在這期間,雖然用戶可以在屏幕上看到這個 Activity ,但是由于這個 Activity 不是屏幕的最前面,故不能交互,在這兩個方法之間,你可以維持相應的資源以便這個 Activity 顯示給用戶時需要。例如,你可以在 onStart() 方法中注冊一個 BroadcastReceiver 去監控界面變化,當用戶不需要時,也可以在 onStop() 中撤銷。 onStart() and onStop() 方法可以多次被調用,以便實現這個 Activity 對用戶時而可見、時而消失。
C 、最前面生命周期:從 onResume() 開始直到相應的 onPause() 調用。在這期間,這個 Activity 在所有別的的 Activities 前面以便與用戶交互。這二個方法之間的交互是經常的事情。例如當設備休眠、一個 Activity 的結果需要轉送,一個新 Intent 需要轉送等等。所以這些方法中的代碼盡量保持輕量級的。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
