Android入門教程之組件Activity的生命周期詳解
返回棧
Android 中的 Activity 是可以層疊的,我們每啟動一個新的 Activity,就會覆蓋在原有的 Activity 之上,然后點擊 Back 鍵會銷毀最上面的 Activity,下面的一個 Activity 就會重新顯示出來
其實 Android 是使用任務(task)來管理 Activity 的,一個任務就是一組存放在棧里的 Activity 的集合,這個棧也被稱作返回棧
默認情況下,啟動一個新的 Activity,它就會在返回棧中入棧,并處于棧頂?shù)奈恢谩6慨斘覀儼聪?Back 鍵或調(diào)用 finish() 方法銷毀一個 Activity 時,處于棧頂?shù)?Activity 就會出棧,前一個入棧的 Activity 就會重新處于棧頂?shù)奈恢?。系統(tǒng)總是會顯示處于棧頂?shù)?Activity 給用戶
Activity 狀態(tài)
每個 Activity 在其生命周期中最多可能有四種狀態(tài):
1. 運行狀態(tài)
當一個 Activity 位于返回棧的棧頂時,Activity 就處于運行狀態(tài)
2. 暫停狀態(tài)
當一個 Activity 不再處于棧頂位置,但仍然可見時,Activity 就進入了暫停狀態(tài)
3. 停止狀態(tài)
當一個 Activity 不再處于棧頂位置,并且完全不可見時,就進入了停止狀態(tài)
4. 銷毀狀態(tài)
一個 Activity 從返回棧中移除后就變成了銷毀狀態(tài)
Activity 的生存期
Activity 類中定義了七個回調(diào)方法,覆蓋了 Activity 生命周期的每一個環(huán)節(jié):
onCreate()
它會在 Activity 第一次被創(chuàng)建時調(diào)用,可以在這個方法中完成 Activity 的初始化操作,比如加載布局、綁定事件等
onStart()
這個方法在 Activity 由不可見變?yōu)榭梢姷臅r候調(diào)用
onResume()
這個方法在 Activity 準備好和用戶進行交互時調(diào)用,此時的 Activity 一定位于返回棧的棧頂,并且處于運行狀態(tài)
onPause()
這個方法在系統(tǒng)準備去啟動或者恢復另一個 Activity 的時候調(diào)用,我們通常會在這個方法將一些消耗 CPU 的資源釋放掉,以及保存一些關鍵數(shù)據(jù),但這個方法的執(zhí)行速度一定要快,不然會影響到新的棧頂 Activity 的使用
onStop()
這個方法在 Activity 完全不可見的時候調(diào)用,它和 onPause() 方法的主要區(qū)別在于,如果啟動的新的 Activity 是一個對話框式的 Activity,那么 onPause() 方法會得到執(zhí)行,而 onStop() 方法并不會執(zhí)行
onDestroy()
這個方法在 Activity 被銷毀之前調(diào)用,之后 Activity 的狀態(tài)將變?yōu)殇N毀狀態(tài)
onRestart()
這個方法在 Activity 由停止狀態(tài)變?yōu)檫\行狀態(tài)之前調(diào)用,也就是 Activity 被重新啟動了
以上七個方法中除了 onRestart() 方法,其他都是兩兩相對的,從而又可以將 Activity 分為以下三種生存期:
完整生存期
Activity 在 onCreate() 方法和 onDestroy() 方法之間所經(jīng)歷的就是完整生存期。一般情況下,一個 Activity 會在 onCreate() 方法中完成各種初始化操作,而在 onDestroy() 方法中完成釋放內(nèi)存的操作
可見生存期
Activity 在 onStart() 方法和 onStop() 方法之間所經(jīng)歷的就是可見生存期。在可見生存期內(nèi),Activity 對于用戶總是可見的,即便有可能無法和用戶進行交互。我們可以通過這兩個方法合理地管理那些對用戶可見的資源。比如在 onStart() 方法中對資源進行加載,而在 onStop() 方法中對資源進行釋放,從而保證處于停止狀態(tài)的 Activity 不會占用過多內(nèi)存
前臺生存期
Activity 在 onResume() 方法和 onPause() 方法之間所經(jīng)歷的就是前臺生存期。在前臺生存期內(nèi),Activity 總是運行狀態(tài),此時的 Activity 是可以和用戶進行交互的,我們平時看到的和接觸最多的就是這個狀態(tài)下的 Activity
Activity 回收處理
當一個 Activity 進入了停止狀態(tài),是有可能被系統(tǒng)回收的。如果一個 Activity 由于系統(tǒng)內(nèi)存不足而被回收,用戶再返回該 Activity 時,其實還是會正常顯示的,但這時并不會執(zhí)行 onRestart() 方法,而是會執(zhí)行 Activity 的 onCreate() 方法,因為 Activity 在這種情況下會被重新創(chuàng)建一次
如果 Activity 存在臨時數(shù)據(jù)和狀態(tài),比如文本輸入框已經(jīng)輸入了一段文字,回來以后文字都沒了,那這是比較影響用戶體驗的。Activity 提供了一個 onSaveInstanceState() 回調(diào)方法,該方法可以保證在 Activity 被回收之前一定會被調(diào)用,可以通過這個方法來解決這個問題
onSaveInstanceState() 方法會攜帶一個 Bundle 類型的參數(shù),Bundle 提供了一系列的方法用于保存數(shù)據(jù)
override fun onSaveInstanceState(outState: Bundle) { super.onSaveInstanceState(outState) var tempData = "Something you just typed" outState.putString("data_key", tempData) }
數(shù)據(jù)保存以后,在 onCreate() 方法有一個 Bundle 類型參數(shù),該參數(shù)帶有之前保存的全部數(shù)據(jù),只需再通過相應的取值方法將數(shù)據(jù)取出即可
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) if (savedInstanceState != null) { val tempData = savedInstanceState.getString("data_key") } }
到此這篇關于Android入門教程之組件Activity的生命周期詳解的文章就介紹到這了,更多相關Android Activity內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
android實現(xiàn)上傳本地圖片到網(wǎng)絡功能
這篇文章主要為大家詳細介紹了android實現(xiàn)上傳本地圖片到網(wǎng)絡功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-09-09Android Flutter實現(xiàn)淘寶App的搜索推薦
這篇文章主要為大家詳細介紹了Android?Flutter如何模擬實現(xiàn)淘寶App的搜索推薦,文中的示例代碼講解詳細,具有一定的借鑒價值,感興趣的可以了解一下2023-07-07